Увеличить ListFragment встроенный пустой размер текста

Я использую listfragment в своем приложении. Когда данные не загружаются, я вызываю setEmptyText с сообщением об ошибке. Это отлично работает на 4-дюймовых телефонах, но на 7 и 10-дюймовых телефонах размер пустой текстовой картинки очень мал и трудно читается.

4-дюймовый пустой текстовый вид

Введите описание изображения здесь

7-дюймовый пустой текстовый вид

Введите описание изображения здесь

Как увеличить размер пустого текстового вида?

Solutions Collecting From Web of "Увеличить ListFragment встроенный пустой размер текста"

Вы можете предоставить свой собственный TextView который будет использоваться как «пустой текст», он просто должен иметь android:id="@id/android:empty" а ListFragment будет использовать его вместо стандартного.

Затем вы можете настроить стиль этого TextView, как вам нравится (либо статически в макете xml):

  <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="... /> 

Или вызовом findViewById() в onCreateView() :

 TextView emptyTextView = (TextView)view.findViewById(android.R.id.empty); emptyTextView.setTextSize(...); 

A (очень хорошая) альтернатива, как прокомментировал @Delblanco, – это вызвать getListView().getEmptyView() . Он вернет либо TextView с id android.R.id.empty (если он указан в макете), либо стандартный TextView который используется иначе.

Ниже приведена ссылка на расширение для ListFragment, которая изменяет размер (и цвет) пустого представления программно:

 /** * Abstract list fragment that does customizations of the list style. */ public abstract class LoggingListFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); TextView emptyView = null; View possibleEmptyView = view.findViewById(0x00ff0001); if (possibleEmptyView instanceof TextView) { emptyView = (TextView) possibleEmptyView; } if (emptyView == null) { possibleEmptyView = getListView().getEmptyView(); if (possibleEmptyView instanceof TextView) { emptyView = (TextView) possibleEmptyView; } } if (emptyView != null) { emptyView.setTextColor(getActivity().getResources().getColor(R.color.list_subtitle_normal)); emptyView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17); } return view; } } 
  1. Создавайте разные папки, такие как res / values-sw720dp, res / values-sw600dp, res / values-v11.

  2. Создайте dimen.xml с другим размером шрифта разного размера экрана.

  3. Используйте значения / dimen.xml:

    <Resources> <dimen name = "normal_font"> 16sp </ dimen> </ resources>

4. Используйте в своем виджете в своем xml.

андроид: TextSize = "@ DIMEN / normal_font

Я бы сделал это по-другому.

Моя идея: узнать размеры экрана и использовать оператор switch / case, чтобы настроить размер текста textView.

Например:

  switch ( area ) { case 7inch: TextView emptyTextView = (TextView)view.findViewById(android.R.id.empty); emptyTextView.setTextSize(...); break; case 4inch: TextView emptyTextView = (TextView)view.findViewById(android.R.id.empty); emptyTextView.setTextSize(...); break; default: values_not_caught_above; } 

Размеры экрана можно найти следующим образом:

Если вы хотите отображать размеры в пикселях, вы можете использовать getSize :

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; int area = height*width; 

Если вы не находитесь в Управлении, вы можете получить отображение по умолчанию через WINDOW_SERVICE:

 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); 

Прежде getSize был введен getSize (в уровне API 13), вы можете использовать методы getWidth и getHeight , которые теперь устарели:

 Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); // deprecated int height = display.getHeight(); // deprecated 

Мне нравится мой лучший способ, потому что очень просто добавить еще один оператор case для дополнительного устройства (может быть, экран в 10 дюймов). Почти ничего в вашем коде не нужно будет менять таким образом.

Вы можете увеличить размер текста, вызвав метод setEmptyText с помощью Spannable , позвольте мне показать вам код:

 String yourEmptyTextMessage = getString(R.string.yourEmptyTextMessage); Spannable spanText = new SpannableString(yourEmptyTextMessage); spanText.setSpan(new RelativeSizeSpan(1.5f), 0, yourEmptyTextMessage.length(), 0); setEmptyText(spanText) 

Возможно, вы захотите изменить значение коэффициента умножения 1.5f на желаемое соотношение