Mehrzeilige Textansicht in Android?

154

Ich mochte unten in xml

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor, Gulistan-e-Johar, Karachi" >
    </TextView> 
</TableRow>

Es funktioniert nicht für multilineund ich benutze TableLayout...

Also, was ist ein Fehler, den ich hier mache?

Chatar Veer Suthar
quelle

Antworten:

197

Wenn der Text, den Sie eingeben, TextViewkurz ist, wird er nicht automatisch auf vier Zeilen erweitert. Wenn Sie möchten TextView, dass der Text unabhängig von der Länge des Textes immer vier Zeilen enthält, legen Sie das android:linesAttribut fest:

<TextView
    android:id="@+id/address1"
    android:gravity="left"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:maxLines="4"
    android:lines="4"
    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>

Sie können dies mit TableRow tun, siehe folgenden Code

<TableRow >
        <TextView
            android:id="@+id/tv_description_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:padding="8dp"
            android:text="@string/rating_review"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:maxLines="4"`enter code here`
            android:padding="8dp"
            android:text="The food test was very good."
            android:textColor="@color/black"
            android:textColorHint="@color/hint_text_color" />
    </TableRow>
Zarah
quelle
21
Das OP wollte nicht, dass die Textansicht unabhängig von der Länge des darin enthaltenen Textes immer vier Zeilen enthält.
Teer
7
Diese Antwort hat bei mir funktioniert. Aber ich habe die besten Ergebnisse erzielt, nicht mit Maxlines und Linien, sondern mit Maxlines und Minlines und habe keine Linien verwendet. Ich setze Minlines auf 1 und Maxlines größer als die größten Daten. Auf diese Weise erhalte ich 1 bis N Zeilen für eine kompakte Ansicht der Daten.
R Earle Harris
1
@ REarleHarris: Ich habe auch die gleiche Lösung ausprobiert, aber das Problem ist, dass nicht maxLines gezählt wird. Alle Daten werden in minLines count angezeigt. Was kann ich jetzt versuchen? Ich verwende eine benutzerdefinierte Textansicht in der XML
Sagar Devanga
118

Ich dachte nur, ich würde das hinzufügen, wenn Sie verwenden:

android:inputType="textMultiLine"

Dann ist die Ansicht nicht mehr anklickbar. Ich habe versucht, mehrzeilige Textansichten in meinem Dia-Drawer-Menü zu erhalten, die offensichtlich auf Klicks reagieren müssen.

Das hat aber gut android:singleLine="false"funktioniert.

Ryan
quelle
3
Dies ist nicht genau richtig, da die eigenen Flusenfehler von Android darauf hindeuten, dass Sie dieses Attribut nur mit EditText und nicht mit TextView verwenden.
Jared
1
Beziehen Sie sich auf die textMultiline? Ich sagte, das nicht zu benutzen. singleLine ist in TextViews in Ordnung: developer.android.com/reference/android/widget/…
Ryan
3
android: singleLine ist jetzt veraltet
Humberto Castañeda
Bist du sicher? Es wird nicht erwähnt, dass in den Dokumenten, auf die ich im obigen Kommentar verweise, obwohl ich gerade gesehen habe, dass es in den res-Dokumenten als solche markiert ist. Seltsamerweise erwähnen sie das auf der TextView-Seite nicht. Das Problem ist, dass die von ihnen vorgeschlagene Problemumgehung (mehrzeilig) verhindert, dass die Ansicht beim Einfügen in mein OP anklickbar ist. developer.android.com/reference/android/R.attr.html#singleLine
Ryan
3
android: singleLine = "false" ist veraltet, da es der Standardwert ist
Ashraf Alshahawy
28

Ich mag keine der Antworten. Stellen Sie einfach den inputType ein und die Textansicht passt sich ihrem Inhalt an

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"/>

Getestet auf einem Nexus One (2.3) und Nexus 4 (4.4)

Maragues
quelle
52
android: inputType = "textMultiLine" ist nicht für TextView, es ist für EditText und Sie erhalten eine Warnung, wenn Sie dies versuchen
bhaskarc
2
Sie sollten auf die Warnungen hören. Verwenden Sie die @ Ryan-Lösung.
m02ph3u5
15

Fügen Sie einfach '\ n' in Ihren Text ein ... kein zusätzliches Attribut erforderlich :)

          <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Pigeon\nControl\nServices"
            android:id="@+id/textView5"
            android:layout_gravity="center"
            android:paddingLeft="12dp"/> 
Naunidh Singh
quelle
6
Diese Lösung kann nicht zum dynamischen Einstellen von Text verwendet werden
Sagar Devanga
@SagarDevanga Was bedeutet es, Text dynamisch einzustellen?
Juil
3
@SagarDevanga, ich habe gerade überprüft, dass dynamische und statische Texte standardmäßig mehrzeilig sind (falls verwendet \n), daher ist es eine richtige Lösung. Nein singleLine=false, nein lines=4und so weiter.
CoolMind
10

Fügen Sie einfach eine Textansicht in ScrollView hinzu

<ScrollView
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:layout_marginLeft="15dp"
           android:layout_marginRight="15dp"
           android:layout_marginTop="20dp"
           android:fillViewport="true">

           <TextView
               android:id="@+id/txtquestion"
               android:layout_width="fill_parent"
               android:layout_height="match_parent"
               android:background="@drawable/abs__dialog_full_holo_light"
               android:lines="20"
               android:scrollHorizontally="false"
               android:scrollbars="vertical"
               android:textSize="15sp" />

       </ScrollView>
Pravin Bhosale
quelle
5

Ich mag die Lösung nicht, die die Anzahl der Zeilen in der Textansicht erzwingt. Ich schlage eher vor, dass Sie es über die hier vorgeschlagene Lösung lösen . Wie ich sehe, hat das OP auch Probleme damit, die Textansicht in der Tabelle wie richtig aussehen zu lassen, und shrinkColumnsist die richtige Anweisung, um das zu erreichen, was gewünscht wird.

Boris Strandjev
quelle
5

Versuchen Sie, mit EditText zu arbeiten, indem Sie es nicht anklickbar und nicht fokussierbar machen. Sie können auch eine Bildlaufleiste anzeigen und die Unterleiste des EditText löschen.
Hier ist ein Beispiel:

<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:inputType="textMultiLine"                   <!-- multiline -->
android:clickable="false"                         <!-- unclickable -->
android:focusable="false"                         <!-- unfocusable -->
android:scrollbars="vertical"     <!-- enable scrolling vertically -->
android:background="@android:color/transparent"   <!-- hide the underbar of EditText -->
/>  

Hoffe das hilft :)

Khalil Meg
quelle
3

Ersetzen Sie zuerst "\n"durch das HtmlÄquivalent "&lt;br&gt;" und rufen Sie dann Html.fromHtml()die Zeichenfolge auf. Befolgen Sie die folgenden Schritte:

String text= model.getMessageBody().toString().replace("\n", "&lt;br&gt;")
textView.setText(Html.fromHtml(Html.fromHtml(text).toString()))

Das funktioniert perfekt.

Gulzar Bhat
quelle
2

Was ich gelernt habe, war, "\ n" zwischen die Wörter einzufügen, an denen es in die nächste Zeile bremsen soll. Beispielsweise...

<TextView
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:text="M-F 9am-5pm \n By Appointment Only" />

Das \ n zwischen 17 Uhr und By ermöglichte mir mehr Kontrolle darüber, wo meine nächste Zeile beginnen und enden sollte.

Eduardo Lopez
quelle
2

Die beste Antwort, die ich für mehrzeiliges TextView gefunden habe, ist:

android:inputType="textMultiLine"
Bhuvan Bhatt
quelle
8
Ist android:inputTypeein Attribut <EditText>nicht für nicht für <TextView>?
Timtim
Eine Warnung wird angezeigt, wenn Sie dieses Attribut einer Textansicht hinzufügen. - Attributierter Android: inputType = "textMultiLine" sollte nicht mit <TextView> verwendet werden. Eigentlich ist dieses Attribut für EditText.
Yhondri
2

Sie können Android verwenden: inputType = "textMultiLine"

  <TextView android:id="@+id/address1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:gravity="left"
    android:maxLines="4" 
    android:inputType="textMultiLine"
    android:text="Johar Mor, Gulistan-e-Johar, Karachi" />
Enakhi
quelle
1
Dies wird als Warnung angezeigt. Nicht für TextView
Stealth Rabbi
1
inputType unterstützt nur EditText-Komponenten.
Chamin Wickramarathna
1

Ich benutzte:

TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table);
tablelayout.setColumnShrinkable(1,true);

es hat bei mir funktioniert. 1 ist die Anzahl der Spalten.

Susana Mar Flores
quelle
0
You can do this with TableRow, see below code

<TableRow >
    <TextView
        android:id="@+id/tv_description_heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:padding="8dp"
        android:text="@string/rating_review"
        android:textColor="@color/black"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4"`enter code here`
        android:padding="8dp"
        android:text="The food test was very good."
        android:textColor="@color/black"
        android:textColorHint="@color/hint_text_color" />
</TableRow>
Jitendra Nandiya
quelle
0

Einfachster Weg

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor,\n Gulistan-e-Johar,\n Karachi" >
    </TextView> 
</TableRow>

Verwenden \nSie, wo Sie eine neue Zeile einfügen möchten. Hoffentlich hilft es Ihnen

dAv dEv
quelle
-1

Warum deklarieren Sie keine Zeichenfolge, anstatt lange Zeilen in die Layoutdatei zu schreiben? Dazu müssen Sie eine Codezeile in der Layoutdatei 'android: text = "@ string / text"' deklarieren und in der Datei \\ app \ src \ main \ res \ values ​​\ strings.xml eine Codezeile hinzufügen 'Ihr mehrzeiliger Text hier' Verwenden Sie auch '\ n', um die Linie von einem anderen Punkt zu trennen, an dem die Linie automatisch angepasst wird.

Tara Prasad Sharma
quelle
-4

Für mich hat keine der Lösungen funktioniert. Ich weiß, dass es keine vollständige Antwort auf diese Frage ist, aber manchmal kann es helfen.

Ich habe 4 Textansichten in ein vertikales lineares Layout eingefügt.

<Linearlayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation:"vertical"

    ...>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line1"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line2"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line3"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line4"
       .../>
</LinearLayout>

Diese Lösung eignet sich für Fälle, in denen der Text in der Textansicht wie Beschriftungen konstant ist.

saleh sereshki
quelle
1
Bitte tu das nicht.
bescheidener Wolf
-23

TextView ist mehrzeilig, wenn nicht genügend Platz für die einzelne Zeile vorhanden ist und singLine nicht auf true gesetzt ist.

Wenn es den Platz in einer Zeile bekommt, wird es nicht mehrzeilig sein.

Rasel
quelle
7
Was ist, wenn ich fill_parent anstelle einer festen Breite verwenden möchte? Mein Inhalt wird geschnitten, wenn ich das tue ...
happyhardik
6
Ich werde es versuchen android:singleLine="false"oder android:inputType="textMultiLine"(wie von Marageus beschrieben). Hinweis, android:inputType="textMultiLine"der Vorrang hat, wenn beide anwesend sind
Romantic Electron
Wenn ich die Ansichten anderer teile, die Kommentare abgegeben haben, ist dies völlig falsch und ich bin verblüfft, warum dies die akzeptierte Antwort ist.
Aleks G