2014-07-04 11 views
5

Używam listfragmentu w mojej aplikacji. Gdy dane się nie załadują, wywołuję setEmptyText z komunikatem o błędzie. Działa to dobrze na telefonach 4-calowych, ale na telefonach 7 i 10-calowych rozmiar pustego tekstu jest bardzo mały i trudny do odczytania.Zwiększanie wbudowanego rozmiaru pustego tekstu listy ListBragment

4 cale pusty Zobacz tekst

enter image description here

7 calowy widok pusty tekst

enter image description here

Jak mogę zwiększyć rozmiar pustej widoku tekstu?

+0

mogłeś albo poszukaj tego 'TextView' używając id' android.R.id.empty' lub, znacznie lepiej, zaimplementuj widok 'ListFragment' aby zawrzeć' ListView' oraz pusty widok, wyśrodkowany 'TextView' (z identyfikatorem 'anddroid: id/empty'), do którego można bezpośrednio ustawić wartość dimens (z różnymi wartościami folderów). – Luksprog

+0

Tak, właśnie to zrobię, jeśli nie znajdę żadnego innego rozwiązania. Dzięki –

+0

"Widok pusty" jest faktycznie powiązany z 'ListView' (lub bardziej precyzyjnym:' AdapterView'), a nie 'ListFragment'. W związku z tym możesz wywołać fragment "' getListView() .getEmptyView() '] (http://developer.android.com/reference/android/widget/AdapterView.html#getEmptyView%28%29) w fragmencie, aby uzyskać poradzić sobie z tym. Domyślnie pusty widok to zwykły 'TextView', więc po rzutowaniu można zastosować pożądane dostosowania. –

Odpowiedz

0
  1. utworzyć różne foldery jak RES/wartości-sw720dp, Res/wartości-sw600dp, RES/wartości-V11.

  2. Utwórz plik dimen.xml z innym rozmiarem czcionki o różnym rozmiarze ekranu.

  3. używać wartości/dimen.xml:

    < zasoby> < Dimen name = "normal_font"> 16SP </Dimen> </Zasoby>

4.Wykorzystanie w swojej widget w twoim xml.

android: TEXTSIZE = "@ Dimen/normal_font

+0

Wiem o innym folderze wartości dla różnych układów, ale moim problemem jest uzyskanie odwołania do pustego widoku tekstowego w fragmencie listy, na który mogę nazwać setTextSize() –

4

Można podać własne TextView być stosowany jako«pustym tekstem», to po prostu musi mieć android:id="@id/android:empty" i ListFragment będzie używać go zamiast standardowego .

następnie można dostosować styl tego TextView jednak lubisz (statycznie w układzie xML):

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

lub dzwoniąc findViewById() w onCreateView():

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

(bardzo dobra) ewentualnie, jako @Delblanco komentuje jest wywołanie getListView().getEmptyView(). Zwróci ona wartość TextView o identyfikatorze android.R.id.empty (jeśli jest dostarczona w układzie) lub standardową TextView, która jest używana w inny sposób.

+0

Czy to też będzie działać z aplikacjami, które korzystają z biblioteki wsparcia? –

+0

@ShivamVerma Tak, możesz porównać obie klasy "ListFragment", a zobaczysz, że jedyną praktyczną różnicą jest to, że podczas gdy struktura ramowa nadmuchuje układ z zasobu ('com.android.internal.R.layout.list_content') wsparcie tworzy widoki inline. Ale w obu można przesłonić i użyć niestandardowego układu, a oba szukają wewnątrz nazwy 'android.R.id.empty'. – matiash

+0

Istnieje jeszcze jedna opcja 'getListView(). GetEmptyView()' w ten sposób nie potrzebujesz refleksji i zawsze otrzymujesz widok, który jest ustawiony jako pusty widok. – Delblanco

0

Zrobiłbym to trochę inaczej.

Mój pomysł: poznaj wymiary ekranu i użyj instrukcji switch/case, aby dostosować swój tekstRozmiar tekstu.

Na przykład:

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; 

    } 

można znaleźć wymiary ekranu w następujący sposób:

Jeśli chcesz wymiary wyświetlacza w pikselach można użyć getSize:

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

Jeśli nie jesteś w Activity możesz uzyskać domyślny wyświetlacz przez WINDOW_SERVICE:

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

Przed getSize został wprowadzony (w poziomie API 13), można użyć getWidth i getHeight metod, które są obecnie nieaktualne:

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

Lubię mój sposób najlepszy, ponieważ jest to bardzo łatwe wystarczy dodać inny przypadek Instrukcja dla dodatkowego urządzenia (może być 10-calowy ekran). Prawie nic w twoim kodzie nie będzie musiało się zmieniać w ten sposób.

+0

Uważaj, ponieważ te rozmiary są w _pixels_, więc niewiele powiedzą o fizycznych wymiarach ekranu. Porównaj np. Nexusa 5 (1920 × 1080) z kartą Galaxy Tab 10.1 (1280 × 800). – matiash

1

Oto spadek rozszerzenia dla ListFragment który zmienia rozmiar (i kolor) pustego widoku programowo:

/** 
* 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; 
    } 

} 
+0

dzięki działa dla mnie i jedno pytanie skąd otrzymasz ten identyfikator '0x00ff0001'? – MilapTank

0

Można zwiększyć rozmiar tekstu poprzez wywołanie setEmptyText metodę z Spannable, niech mi pokazać jakiś kod:

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

może chcesz zmienić 1.5f wartość mnożnika do pożądanego stosunku