2014-07-04 9 views
5

Ich verwende ListFragment in meiner App. Wenn die Daten nicht geladen werden können, rufe ich setEmptyText mit der Fehlermeldung auf. Dies funktioniert gut bei 4-Zoll-Telefonen, aber bei 7 und 10-Zoll-Telefonen ist die Größe der leeren Textansicht sehr klein und schwer zu lesen.erhöhen ListFragment eingebaut leere Textansicht Größe

4 Zoll leere Textansicht

enter image description here

7 Zoll leere Textansicht

enter image description here

Wie kann ich die Größe der leeren Textansicht zu erhöhen?

+0

Sie könnten suche entweder nach der 'TextView' mit der ID' android.R.id.empty' oder, viel besser, implementiere die 'ListFragment'-Ansicht, um eine' ListView' plus die leere Ansicht, eine zentrierte 'TextView' (mit der ID 'anddroid: id/empty'), auf die Sie direkt den dimens-Wert (mit verschiedenen Ordnerwerten) setzen könnten. – Luksprog

+0

Ja, das werde ich tun, wenn ich keine andere Lösung finden kann. Danke –

+0

Die 'leere Ansicht' ist tatsächlich mit der 'ListView' (oder genauer gesagt: der' AdapterView') verbunden und nicht mit der 'ListFragment'. Als solche können Sie [getListView() .getEmptyView() '] (http://developer.android.com/reference/android/widget/AdapterView.html#getEmptyView%28%29) im Fragment aufrufen, um a zu erhalten handle dran. Standardmäßig ist die leere Ansicht eine einfache "TextView", so dass Sie nach einer Besetzung die gewünschten Anpassungen vornehmen können. –

Antwort

0
  1. Erstellen Sie verschiedene Ordner wie res/Werte-sw720dp, res/Werte-sw600dp, res/Werte-v11.

  2. Erstellen Sie dimen.xml mit unterschiedlicher Schriftgröße mit unterschiedlicher Bildschirmgröße.

  3. Werte verwenden/dimen.xml:

    < Ressourcen> < Dimen name = "normal_font"> 16SP </Dimen> </resources>

4.Use in Ihrem Widget in Ihrem XML.

android: textsize = "@ Dimen/normal_font

+0

Ich kenne verschiedene Wert Ordner für unterschiedliche Layout, aber mein Problem ist eine Referenz auf die leere Textansicht in der Liste Fragment, auf dem ich aufrufen kann SetTextSize() –

4

können Sie Ihre eigenen liefern TextView als verwendet werden‚leeren Text‘, es muss nur android:id="@id/android:empty" haben und die ListFragment wird es statt der Standard verwenden .

können

Sie dann den Stil dieser Textview anpassen aber Sie (entweder statisch in dem xML-Layout) wie:

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

oder durch findViewById() inAufruf:

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

A (sehr gut) Alternative, als @Delblanco kommentiert, ist getListView().getEmptyView() zu nennen. Es wird entweder TextView mit der ID android.R.id.empty (falls im Layout mitgeliefert) oder der Standard TextView zurückgegeben, der ansonsten verwendet wird.

+0

Wird dies auch mit Anwendungen, die Support-Bibliothek verwenden? –

+0

@ShivamVerma Ja, Sie können beide 'ListFragment' Klassen vergleichen und Sie werden sehen, dass der einzige praktische Unterschied darin besteht, dass das Framework ein Layout von einer Ressource aufbläht (' com.android.internal.R.layout.list_content') Mit der Unterstützung erstellt man die Ansichten inline. Aber in beiden Fällen können Sie Ihr benutzerdefiniertes Layout überschreiben und verwenden, und beide suchen innen nach "android.R.id.empty". – matiash

+0

Es gibt eine andere Option 'getListView(). GetEmptyView()' Auf diese Weise brauchen Sie keine Reflektion und erhalten immer die Ansicht, die als leere Ansicht festgelegt ist. – Delblanco

0

Ich würde es ein bisschen anders machen.

Meine Idee: Ermitteln Sie die Abmessungen des Bildschirms und verwenden Sie eine switch/case-Anweisung, um die Größe des textView-Texts anzupassen.

Zum Beispiel:

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; 

    } 

Sie die Dimensionen des Bildschirms lassen sich wie folgt:

Wenn Sie die Anzeige Abmessungen in Pixel möchten, können Sie getSize verwenden:

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

Wenn Sie sind nicht in einem Activity können Sie die Standardanzeige über WINDOW_SERVICE erhalten:

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

Vor getSize eingeführt wurde (in API-Ebene 13), können Sie die getWidth und getHeight Methoden verwenden, die jetzt veraltet sind:

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

ich mich am besten gefällt, weil es sehr einfach ist, nur einen anderen Fall hinzufügen Aussage für ein zusätzliches Gerät (kann 10inch Bildschirm sein). Fast nichts in Ihrem Code muss auf diese Weise geändert werden.

+0

Seien Sie vorsichtig, da diese Größen in Pixeln sind, so dass sie Ihnen sehr wenig über die physischen Abmessungen des Bildschirms erzählen. Vergleichen Sie zum Beispiel ein Nexus 5 (1920 × 1080) mit einem Galaxy Tab 10.1 (1280 × 800). – matiash

1

Hier ist ein Rückgang der Erweiterung für ListFragment, die die Größe (und Farbe) des leeren Ansicht ändert sich programmatisch:

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

Danke funktioniert für mich und eine Frage von wo bekommen Sie diese ID '0x00ff0001'? – MilapTank

0

Sie die Größe des Textes erhöhen setEmptyText Methode mit einem Spannable durch den Aufruf, lassen ich Ihnen einige Code:

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

Sie mögen 1.5f Multiplikatorwert zu gewünschtem Verhältnis ändern