So umbrechen Sie Text in der Textansicht in Android

85

Weiß jemand, wie man Text in TextView auf der Android-Plattform umschließt? Wenn der Text in der Textansicht die Bildschirmlänge überschreitet, sollte er in der zweiten Zeile angezeigt werden.

Ich habe Folgendes gesucht und versucht:

android:scrollHorizontally="false",
android:inputType="textMultiLine",
android:singleLine="false"

Aber keine Arbeit ..

Kann mir jemand vorschlagen, wie ich das machen kann.

Sameer
quelle
6
TextViews sollten standardmäßig in Zeilenumbrüche umgewandelt werden. Können Sie Ihr gesamtes Layout veröffentlichen?
Danh32
Befindet sich die Textansicht zufällig in einem Tabellenlayout? Wenn ja, habe ich eine Antwort für Sie.
JohnFx
1
In meinem Fall bemerkte ich nach dem Hinzufügen von ungefähr einem halben Dutzend Attributen (siehe unten), um die Textansicht zu zwingen, Text über mehrere Zeilen zu wickeln, ohne Erfolg, dass ich ein Attribut hatte android:inputType="textPersonName". Anscheinend wurde es vom Android Studio-Designtool hinzugefügt. Das Entfernen dieses Attributs hat das Problem behoben! Möglicherweise gibt es auch andere Eingabetypen, die das Umbrechen verhindern.
LarsH

Antworten:

54

Bei mir trat dieses Problem nur bei Android <4.0 auf

Die Kombination der von mir verwendeten Parameter war:

android:layout_weight="1"
android:ellipsize="none"
android:maxLines="100"
android:scrollHorizontally="false"

Die Anzahl der maxLines schien das zufällige letzte Stück zu sein, das meinen TextView-Wrap verursachte.

Guykun
quelle
9
Ich weiß, dass es jetzt ein alter Thread ist, dachte aber, ich würde meine Ergebnisse veröffentlichen. Ich habe nur das 'android: maxLines' verwendet und dann meinen Text umbrochen. Cheer @Guykun
StuStirling
Dies ist wiederum gleichbedeutend mit dem einfachen Festlegen der Höhe der Textansicht match_parent, was nicht mit dem Erweitern der Höhe der Textansicht um die zusätzlichen Zeilen identisch ist.
SMBiggs
49

Einschränkungslayout

<TextView
android:id="@+id/some_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"

app:layout_constraintLeft_toLeftOf="@id/textview_above"
app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
  • Stellen Sie sicher, dass Ihre Layoutbreite Null ist
  • Links / Rechts-Einschränkungen sind definiert
  • Die Layouthöhe von wrap_content ermöglicht die Erweiterung nach oben / unten.
  • Stellen Sie ein android:maxLines="2", um eine vertikale Ausdehnung zu verhindern (2 ist nur ein Beispiel)
  • Ellipsen sind wahrscheinlich. eine gute idee mit max linienandroid:ellipsize="end"

Mit der Breite 0dp können Sie durch Links- / Rechtsbeschränkungen bestimmen, wie breit Ihr Widget ist.

Durch Festlegen von Links / Rechts-Einschränkungen wird die tatsächliche Breite Ihres Widgets festgelegt, in die Ihr Text eingeschlossen wird.

Constraint Layout-Dokumente

Bäcker
quelle
Ja! Genau so funktioniert es! Stellen Sie einfach sicher, dass Sie die Breite auf 0dp einstellen
Yoraco Gonzales
Das Setzen der linken und rechten Einschränkungen hat mir geholfen, es zu umbrechen, anstatt dass der Text über die rechten Grenzen hinaus überläuft
Jia Tse
31

Für den Fall, dass sich das TextViewin a befindet TableLayout, besteht die Lösung darin, android:shrinkColumns="1"auf das zu setzen TableLayout. (Ersetzen 1Sie die Textansicht, in die Sie einbrechen möchten, durch die Spaltennummer. (0-indiziert))

AFAICT, auf dem werden keine weiteren Attribute benötigt TextView.

Für andere Fälle siehe die anderen Antworten hier.

FWIW, ich hatte es anfangs dazu gebracht, mit ihm zu arbeiten

 <TextView
   android:id="@+id/inventory_text"
   android:layout_width="fill_parent"
   android:layout_weight="1"
   android:width="0dp"

Dies führte jedoch zu einem zusätzlichen leeren Bereich am unteren Rand des Dialogs, in dem sich alles befand.

aij
quelle
Das habe ich gesucht! Ansonsten sind meine Worte abgeschnitten
Carson Holzheimer
11

Sie müssen 2 Parameter verwenden:

  • android:ellipsize="none" : Der Text wird nicht auf die Breite der Textansicht zugeschnitten

  • android:scrollHorizontally="false" Der Text wird so viele Zeilen wie nötig umbrochen

Kartaguez
quelle
4
Das funktioniert bei mir nicht. (FWIW, ich habe eine Textansicht in einer TableRow in einem TableLayout.)
aij
7

Dies sollte Ihr Problem beheben : android:layout_weight="1".

user755121
quelle
Dies führt lediglich dazu, dass die Textansicht erweitert wird, um so viel Platz wie möglich zu beanspruchen. Dies entspricht dem Festlegen der Höhe match_parent. Nicht ganz das Gleiche wie OP wollte.
SMBiggs
1
Im Fall von TableLayout wurde layout_weight="1"das Problem für mich behoben. Meine TableRow, die die Textansicht enthält, wurde jedoch layout_heightauf einen bestimmten Wert festgelegt. Vielleicht wird für jemanden nützlich sein
Kit
5

OK Leute, die Wahrheit liegt irgendwo in der Mitte, denn man muss das Problem aus der Sicht der Eltern und des Kindes sehen. Die folgende Lösung funktioniert NUR im Spinner-Modus = dialogunabhängig von der Android-Version (kein Problem dort .. getestet in VD und DesireS mit Android => 2.2):

  1. . Stellen Sie den Spinner-Modus (den übergeordneten Modus) wie folgt ein:

    android:spinnerMode="dialog"  
  2. Setzen Sie die Eigenschaften der Textansicht (untergeordnete benutzerdefinierte Ansicht) auf:

    android:layout_weight="1"  
    android:ellipsize="none"  
    android:maxLines="100"  
    android:scrollHorizontally="false"
    

Ich hoffe das funktioniert auch bei dir.

Skourkos
quelle
Ich habe so viele Dinge versucht, damit es im Dropdown-Modus funktioniert, aber nichts hat funktioniert. Jetzt im 'Dialog'-Modus.
Mangesh
5

Bei Verwendung app:breakStrategy="simple"von AppCompatTextViewwird das Absatzlayout gesteuert.

Es hat drei konstante Werte

  • ausgewogen
  • hohe Qualität
  • einfach

Entwerfen in Ihrer TextView-XML

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/textquestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:scrollHorizontally="false"
        android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...."
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:breakStrategy="simple" />

Wenn Ihre aktuelle Mindest-API-Stufe 23 oder mehr beträgt, dann in Codierung

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

Weitere Informationen finden Sie in dieser BreakStrategy

Textansicht breakStrategy Bild

Nirav Bhavsar
quelle
4

Wenn Sie android:maxEmseinen bestimmten Wert zusammen mit android:layout_weight="1"festlegen, wird die Textansicht umbrochen, sobald die angegebene Länge der ems erreicht ist.

Freddroid
quelle
Funktioniert auch für TextView, das in RelativeLayout platziert ist.
Ayz4sci
Ich habe
3

In Android Studio 2.2.3 gibt es unter der inputTypeEigenschaft eine Eigenschaft namens textMultiLine. Durch Auswahl dieser Option wurde ein ähnliches Problem für mich behoben. Ich hoffe das hilft.

user7652193
quelle
2
Dies ist für EditText, nicht Textview
PsychedelicSubstance
2

Ich habe gerade an einer Textansicht in einem Layout in einer RecyclerView gearbeitet. Ich hatte Text abgeschnitten, zum Beispiel, denn Read this messageich sah : Read this. Ich habe versucht, android:maxLines="2"die Textansicht einzustellen, aber nichts hat sich geändert. Allerdings android:lines="2"führte in der Read thisersten Zeile und messagein der 2 ..

Stan Kurdziel
quelle
1

Ich hatte das gleiche Problem. Nach der Änderung hat es funktioniert -

android:layout_width="wrap_content"

Die Auslassungspunkte, maxLines oder layout_weight - alles machte keinen Unterschied. Hinweis - Die übergeordnete Breite wird auch als wrap_content festgelegt.

Medha
quelle
1

Sie müssen lediglich die Breite Ihrer Textansicht festlegen .

android: layout_width = "60dp"

Sie können die Breite nach Ihren Wünschen ändern. Geben Sie einfach einen langen Satz ein, um zu überprüfen, ob er so funktioniert

android: text = "Ich möchte unter den erstklassigen Software-Ingenieuren sein."

Akindev
quelle
1

Versuchen Sie den Ansatz von @ Guykun

android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"

Stellen Sie außerdem sicher, dass die Breite der Eltern nicht so eingestellt ist, dass Inhalte umbrochen werden. Das ist das, was mir gefehlt hat.

Shailendra Suriyal
quelle
0

Ich verwende Android 2.2 und meine Textansicht wechselt automatisch in die nächste Zeile, wenn sie den Bildschirm überschreitet.

Wenn Sie möchten, dass der Text in die nächste Zeile vor dem Ende des Bildschirms wechselt, fügen Sie ihn einfach hinzu (geben Sie einfach Ihren eigenen dp-Wert ein). Dies ist nützlich, wenn Sie rechts neben dem Text ein Bild haben.

android:layout_marginRight="52dp"
Britc
quelle
0

Seltsamerweise habe ich meine Textansicht in Code erstellt und sie verpackt - obwohl ich nichts anderes als Standardmaterial festgelegt habe - aber überzeugen Sie sich selbst:

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
childParams.setMargins(5, 5, 5, 5);

Label label = new Label(this);
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label");
label.setLayoutParams(childParams);

Wie Sie der Parameterdefinition entnehmen können, verwende ich ein LinearLayout. Die Klasse Label erweitert einfach TextView und tut dort nichts anderes, als die Schriftgröße und die Schriftfarbe festzulegen.

Wenn es im Emulator (API Level 9) ausgeführt wird, wird der Text automatisch in drei Zeilen eingeschlossen.

Ready4Android
quelle
Beachten Sie die Verwendung dieses Codes LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);. Höchstwahrscheinlich ist das Wrapping, das Sie als "automagisch" betrachten
nemesisfixx
0

layout_withStellen Sie einfach eine bestimmte Größe ein. Wenn der Text die maximale Breite ausfüllt, läuft er in die nächste Zeile über und verursacht einen Wrap-Effekt.

<TextView
    android:id="@+id/segmentText"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/segmentHeader"
    android:text="You have the option to record in one go or segments(if you swap options 
    you will loose your current recordings)"
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>
Frank Odoom
quelle
-1

Sie müssen Ihre TextView in einer ScrollView mit folgender Berechtigung hinzufügen:

<ScrollView android:id="@+id/SCROLL_VIEW"  
android:layout_height="150px"   
android:layout_width="fill_parent">  

<TextView   
   android:id="@+id/TEXT_VIEW"   
   android:layout_height="wrap_content"   
   android:layout_width="wrap_content"   
   android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>
Ludovic Landry
quelle
4
Vielen Dank für Ihre Antwort. Mein Ziel ist es jedoch, den Text zu umbrechen, wenn er die Zeilenlänge überschreitet, und keinen horizontalen Scroller zu platzieren.
Sameer