2014-07-04 7 views
5

Sto usando listfragment nella mia app. Quando i dati non riescono a caricare, richiamo setEmptyText con il messaggio di errore. Funziona bene su telefoni da 4 pollici, ma su telefoni da 7 e 10 pollici la dimensione della visualizzazione testo vuota è molto piccola e difficile da leggere.aumentare ListFragment nel testo vuoto incorporato visualizza dimensioni

4 pollici vista testo vuoto

enter image description here

7 pollici vista testo vuoto

enter image description here

Come è possibile aumentare le dimensioni di vista testo vuoto?

+0

si potrebbe o cercate 'TextView' usando l'id' android.R.id.empty' o, molto meglio, implementate la vista 'ListFragment' per contenere un' ListView' oltre alla vista vuota, un 'TextView' centrato (con l'id 'anddroid: id/empty') a cui è possibile impostare direttamente il valore di dimensione (con valori di cartella diversi). – Luksprog

+0

sì, questo è quello che farò se non trovo altre soluzioni. Grazie –

+0

La 'vista vuota' è in realtà associata a 'ListView' (o più preciso:' AdapterView'), e non a 'ListFragment'. Come tale, puoi chiamare ['getListView() .getEmptyView()'] (http://developer.android.com/reference/android/widget/AdapterView.html#getEmptyView%28%29) nel frammento per ottenere un gestiscilo. Di default la vista vuota è un semplice 'TextView', quindi dopo un cast è possibile applicare le personalizzazioni desiderate. –

risposta

0
  1. creare diverse cartelle come res/valori-sw720dp, res/valori-sw600dp, res/valori-V11.

  2. Creare dimen.xml con dimensioni di carattere diverse per dimensioni dello schermo diverse.

  3. Usa i valori/dimen.xml:

    < risorse> < nome dimen = "normal_font"> 16SP </dimen> </risorse>

4.Use nella vostra widget nel tuo xml.

android: textSize = "@ dimen/normal_font

+0

Conosco una cartella con valori diversi per layout diversi, ma il mio problema è ottenere un riferimento alla vista di testo vuota nel frammento di elenco su cui posso chiamare setTextSize() –

4

È in grado di fornire il proprio TextView per essere utilizzato come 'testo vuoto', è solo bisogno di avere android:id="@id/android:empty" e la ListFragment lo utilizzerà al posto di quello standard .

È quindi possibile personalizzare lo stile di questo TextView come più vi piace (in modo statico nel layout xml):

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

o chiamando findViewById() in onCreateView():

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

A (molto buono) alternativa, come ha commentato @Delblanco, è quella di chiamare getListView().getEmptyView(). Restituirà lo TextView con l'ID android.R.id.empty (se fornito nel layout) o lo standard TextView utilizzato in altro modo.

+0

Funzionerà anche con le app che usano la libreria di supporto? –

+0

@ShivamVerma Sì, puoi confrontare entrambe le classi 'ListFragment' e vedrai che l'unica differenza pratica è che mentre il framework gonfia un layout da una risorsa (' com.android.internal.R.layout.list_content') il supporto uno crea le viste in linea. Ma in entrambi puoi sostituire e usare il tuo layout personalizzato, ed entrambi cercano "android.R.id.empty" all'interno. – matiash

+0

C'è un'altra opzione 'getListView(). GetEmptyView()' in questo modo non è necessario riflettere e ottenere sempre la vista che è impostata come vista vuota. – Delblanco

0

Lo farei in modo un po 'diverso.

La mia idea: trova le dimensioni dello schermo e usa un'istruzione switch/case per adattare il testo alle dimensioni del testo.

Ad esempio:

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; 

    } 

Si possono trovare le dimensioni dello schermo come segue:

Se si desidera che le dimensioni di visualizzazione in pixel è possibile utilizzare getSize:

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

Se non sei in uno Activity puoi ottenere lo schermo predefinito tramite WINDOW_SERVICE:

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

Prima getSize è stato introdotto (nel livello di API 13), è possibile utilizzare i getWidth e getHeight metodi che sono ormai obsoleti:

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

Mi piace il mio modo migliore perché è molto facile aggiungere solo un altro caso dichiarazione per un dispositivo aggiuntivo (potrebbe essere schermo da 10 pollici). Quasi nulla nel tuo codice dovrà cambiare in questo modo.

+0

Fai attenzione, poiché quelle dimensioni sono in _pixel_, quindi ti diranno molto poco delle dimensioni fisiche dello schermo. Confronta ad esempio un Nexus 5 (1920 × 1080) con un Galaxy Tab 10.1 (1280 × 800). – matiash

1

Ecco un calo di estensione per ListFragment che cambia la dimensione (e colore) della vista vuota a livello di codice:

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

grazie funziona per me e una domanda da dove si ottiene questo ID '0x00ff0001'? – MilapTank

0

Si può aumentare la dimensione del testo chiamando setEmptyText metodo con un Spannable, lasciate mi permetta di mostrare un po 'di codice:

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

si consiglia di cambiare 1.5f valore del moltiplicatore di rapporto desiderato

Problemi correlati