2016-04-16 10 views
3

Ich möchte in der Lage sein, den Text in einem TextView je nach dem verfügbaren Platz festzulegen, um Ellipsenbildung zu vermeiden.Android: wie man Text abhängig von verfügbarem Raum einstellt

Zum Beispiel:

  • wenn es genug Platz um den Text „Der rote Fuchs springt“

  • , wenn es nicht genug Platz (und folglich „Der rote Fuchs springt“ gesetzt ist, würde sein ellipsentiert) setze den Text "Sprünge"

Bitte wie kann ich das erreichen?

Antwort

1

Sie könnten Paint.measureText(String) verwenden, um die Breite der gesamten Zeichenfolge zu bestimmen, wenn sie mit Ihrem Paint-Objekt gezeichnet wird. Wenn dieser Wert größer als die TextView-Breite ist, wissen wir, dass der Text ellipsentiert wird.

float totalLength = myPaint.measureText("The red fox jumps"); 
float tvWidth = myTextView.getWidth(); // get current width of TextView 

if (tvWidth < totalLength) { 
    // TextView will display text with an ellipsis 
} 

Sobald wir den Text kennen abgeschnitten wird, können wir Versuch und Irrtum verwenden, um festzustellen, was die Mindest Text, der auf dem Bildschirm angezeigt werden kann, ist. Dieser Schritt hängt von Ihrer Geschäftslogik ab, sollte jedoch die gleichen Paint-Berechnungen wie der erste Schritt verwenden.

calculateStringWidth("The red fox jumps"); // too large 
calculateStringWidth("red fox jumps"); // still too large 
calculateStringWidth("fox jumps"); // width is less than TextView, will fit without ellipsis 
+0

Große Antwort! Gibt measureText die Breite in Pixeln zurück? –

+0

Ich glaube, die meisten Android-APIs geben Pixel zurück. – fractalwrench

1

Eine Methode wäre, die benötigte Größe für den gegebenen Text zu berechnen.

Der Aufruf von measure() "bestimmt die Größenanforderungen für diese Ansicht und alle untergeordneten Elemente". Bezug auf Androids View doc. Documentation

+0

Auch ein guter Punkt. –

Verwandte Themen