2010-10-22 15 views
10

Ich habe eine Aktivität, bei der ich eine Überschrift anzeigen möchte, die das obere Viertel der App aufruft und einen dynamischen Textsatz anzeigt. In einigen Fällen passt alles auf eine Zeile und ich möchte, dass die Schriftgröße vergrößert wird, damit sie groß und leicht lesbar ist. In einigen Fällen ist es auf mehreren Zeilen (normalerweise weniger als 4) und muss kleiner sein.Größenanpassung eines mehrzeiligen Android-TextViews

Die Komplikation ist, dass, wenn ich ausdrücklich die Zeilenumbrüche in setText manchmal erhält es eine neue Zeile einzufügen, wo ich nicht erwarten war, das heißt:

 
"My first line of text\nMy Second line of text" 
Might get turned into (it's right adjusted in this version): 
"My first line of 
      text 
    My second line 
      of text" 

Ich bin mir nicht sicher, wie entweder Haltung gehen die TextView von versuchen, Zeilenumbrüche einzufügen oder es einfach machen, um die ganze Sache zu formatieren. Wenn ich einen Text als ein wirklich langes einzelnes Wort definiere, fügt er an einer bestimmten Stelle einen neuen Zeilensprung in die Mitte ein. Und manchmal bekomme ich zufällig die letzten Zeilen Text.

Soll ich nur explizit die Schriftgröße auf klein setzen, damit sie korrekt angelegt wird, und dann die Größe manuell anpassen? Gibt es eine "Best Practice", die ich dafür verwenden sollte? Wenn ich die Schriftgröße auf eine relativ große Schriftgröße einstelle, funktioniert das irgendwie, aber es wäre schön, herauszufinden, was der "richtige" Weg wäre, dies zu tun. Und ich würde lieber nicht in 4 einzeiligen TextViews manuell hinzufügen und sie selbst formatieren.

Das Layout xml Ich verwende ist:

<TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginTop="10dip" 
     android:layout_marginRight="8dip" 
     android:singleLine="false" 
     android:ellipsize="marque" 
     android:gravity="right|bottom" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textSize="30sp" 
/> 
+0

Umm, es ist nicht ganz klar, was Sie tun möchten. Sie möchten die Größe des Textes ändern, um ein Textfeld zu füllen? Warum fügst du überhaupt neue Zeilen hinzu? Legen Sie einfach die Größe fest, fügen Sie den Text ein und lassen Sie ihn umbrechen. – Falmarri

+0

Wie groß ist die Größe, damit sie tatsächlich in die gesamte Textbox passt? Wenn Sie eine zu große Größe wählen, beschließt TextView, neue Zeilen in Ihren Text zu schreiben/einzufügen (und ich bin mir nicht sicher, wie das entschieden wird). Wenn Sie eine kleine Größe wählen und keine neuen Zeilen in sich selbst einfügen, ist es schwierig, sie zu skalieren, ohne grundsätzlich jede Schriftgröße durchlaufen zu müssen und sie jedes Mal neu zu formatieren (Einfügen neuer Zeilen). Es wäre schön, wenn Sie einfach verhindern würden, dass TextView mit den Dingen herumhantiert und selbst neue Zeilen einfügt. – William

Antwort

0

Sie es tun können. Fügen Sie dem Zeichenfolgenwert einen neuen Zeichensatz hinzu. Legen Sie dann diesen Zeichenfolgenwert als das Textattribut der Textansicht fest.

String temp = "ASDF \n"+"EFG \n"+"HIJ"; 
TextView tv=//find it from the context 
tv.setText(temp); 
0

Es gibt eine weitere Lösung, die Sie WebView verwenden können, zu tun, was Sie diese für weitere Details Android TextView Justify Text Antwort wollen überprüfen. mit webview Sie müssen nicht um die Linie kümmern Ausrichtungen Sie, dass durch HTML-CSS-Eigenschaft

-1

Lassen Sie mich Ihre Frage rekapitulieren verwalten können, um sicherzustellen, dass ich Sie richtig verstanden.

  1. Ihre Eingabe ist immer 1 bis 4 Zeilen Text
  2. Sie immer und erst am Ende einer Zeile brechen wollen, wenn Sie mehr als eine Zeile
  3. haben Sie jede Zeile so groß sein wollen wie möglich, so dass es die Textansicht passt, die 1/4 des Bildschirm Höhe ist?

Ich schlage vor, Sie machen eine custom view:

  • Verwendung Paint.getTextBounds die beste Textgröße dynamisch in Code
  • zum Zeichnen des Textes zu bestimmen, können Sie die Hilfsklasse StaticLayout zur Steuerung Ausrichtung und so verwenden .
  • Sie benutzerdefinierte haben Ansicht 1/4 des Bildschirms einnehmen entweder legte es in einem Linearlayout verwenden layout_weight es seine Höhe abzutreten oder programmatisch in View.onMeasure gesetzt
1

Sie die String Länge zählen konnte und stellen Sie die Textgröße die beste Größe für jede Länge

etwas in dieser Form

if(myString.length()==40){ 
    myTextview.setTextSize(11); 
else if(myString.length()==25){ 
    myTextview.setTextSize(16); 
... 

ich hoffe, das hilft passen.

Verwandte Themen