Multiline TextView in Android?


154

Mi è piaciuto di seguito 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>

Non funziona multilinee sto usando TableLayout...

quindi che errore sto facendo qui?

Risposte:


197

Se il testo che stai inserendo TextViewè breve, non si espanderà automaticamente su quattro righe. Se si desidera che il TextViewper sempre avere quattro linee indipendentemente dalla lunghezza del testo in esso, impostare l' android:linesattributo di:

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

Puoi farlo con TableRow, vedi sotto il codice

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

21
L'OP " non voleva che TextView avesse sempre quattro righe indipendentemente dalla lunghezza del testo".
tar

7
Questa risposta ha funzionato per me. Ma ho ottenuto i risultati migliori, non con linee max e linee, ma con linee max e linee minime e non ho usato linee. Ho impostato minline su 1 e maxline più grandi dei dati più grandi. In questo modo ottengo da 1 a N righe per una visualizzazione compatta dei dati.
R Earle Harris,

1
@REarleHarris: anch'io ho provato la stessa soluzione ma il problema è che non sta prendendo il conteggio maxLines. Tutti i dati vengono visualizzati nel conteggio delle minline. Cosa posso provare ora sto usando una visualizzazione di testo personalizzata in xml
Sagar Devanga il

119

Ho pensato di aggiungere che se usi:

android:inputType="textMultiLine"

Quindi la vista smette di essere cliccabile. Stavo cercando di ottenere visualizzazioni di testo su più righe nel mio menu a scomparsa che ovviamente doveva rispondere ai clic.

Ha android:singleLine="false"funzionato bene però.


3
Questo non è esattamente corretto poiché gli errori di lanugine di Android suggeriscono di utilizzare questo attributo solo con EditText e non TextView.
Jared

1
Ti riferisci al testo Multiline? Ho detto di non usarlo. singleLine va bene su TextViews: developer.android.com/reference/android/widget/…
Ryan

3
android: singleLine ora è deprecato
Humberto Castañeda,

Sei sicuro? Non menziona questo nei documenti a cui mi collego nel commento sopra, anche se ho appena visto che è contrassegnato come tale nei documenti di res. Strano che non lo menzionino nella pagina TextView. Il problema è che la soluzione alternativa che suggeriscono (multilinea) impedisce alla vista di essere cliccabile mentre inserisco il mio PO. developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android: singleLine = "false" è deprecato in quanto è il valore predefinito
Ashraf Alshahawy,

28

Non mi piace nessuna delle risposte. Basta impostare inputType e TextView si adatterà al suo contenuto

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

Testato su Nexus One (2.3) e Nexus 4 (4.4)


52
android: inputType = "textMultiLine" non è per TextView, è per EditText e ricevi un avviso se provi a farlo
bhaskarc

2
Dovresti ascoltare gli avvisi. Usa la soluzione @Ryans.
m02ph3u5,

15

Basta inserire '\ n' nel testo ... non è richiesto alcun attributo aggiuntivo :)

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

6
questa soluzione non può essere utilizzata per impostare il testo in modo dinamico
Sagar Devanga,

@SagarDevanga Cosa significa impostare il testo in modo dinamico?
juil

3
@SagarDevanga, ho appena controllato, un testo dinamico e statico è multilinea di default (se usato \n), quindi è una soluzione giusta. No singleLine=false, no lines=4e così via.
CoolMind,

10

Aggiungi la visualizzazione di testo in ScrollView

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

5

Non mi piace la soluzione che impone il numero di righe nella vista di testo. Preferisco suggerirti di risolverlo tramite la soluzione proposta qui . A mio modo di vedere, l'OP sta anche lottando per far apparire la visualizzazione del testo come corretta nella tabella ed shrinkColumnsè la direttiva corretta da trasmettere per raggiungere ciò che si desidera.


5

Prova a lavorare con EditText rendendolo non cliccabile e sfocabile, inoltre puoi visualizzare una barra di scorrimento ed eliminare la barra inferiore di EditText.
Ecco un esempio:

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

Spero che questo ti aiuti :)


3

Sostituisci prima "\n"con il suo Htmlequivalente, "&lt;br&gt;" quindi chiama Html.fromHtml()la stringa. Seguire i passaggi seguenti:

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

Funziona perfettamente.


2

Quello che ho imparato è stato aggiungere "\ n" tra le parole in cui vuoi che si interrompa nella riga successiva. Per esempio...

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

Il \ n tra le 17:00 e By mi ha permesso un maggiore controllo di dove volevo che la mia prossima linea iniziasse e finisse.


2

La migliore risposta che ho trovato per TextView multilinea è:

android:inputType="textMultiLine"

8
Non è android:inputTypeun attributo per <EditText>non per <TextView>?
timtim,

Viene visualizzato un avviso se si aggiunge questo attributo a TextView. - Android attribuito: inputType = "textMultiLine" non deve essere utilizzato con <TextView>. In realtà questo attributo è per EditText.
Yhondri,

2

puoi usare android: 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" />

1
Questo è mostrato come un avvertimento. Non destinato a essere utilizzato per TextView
Stealth Rabbi il

1
inputType è solo il supporto per i componenti EditText.
Chamin Wickramarathna

1

Ero solito:

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

ha funzionato per me. 1 è il numero di colonna.


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>

0

Modo più semplice

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

Usa \ndove vuoi inserire una nuova riga Speriamo che ti possa aiutare


0

La chiave è una visualizzazione testuale con singleline=false(che sì è deprecato, ma che è necessario lavorare) combinata con lines, maxlinesominlines

<TextView
                android:id="@+id/txtBowlers"
                style="@style/Default_TextBox.Small"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:singleLine="false"
                android:maxLines="6"
                android:text="Bob\nSally\nJohn"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="@+id/txtTeamName"
                app:layout_constraintTop_toBottomOf="@+id/txtTeamName"/>

-1

Perché non dichiarare una stringa invece di scrivere una lunga riga nel file di layout. Per questo devi dichiarare una riga di codice nel file di layout 'android: text = "@ string / text"' e andare su \\ app \ src \ main \ res \ valori \ strings.xml e aggiungere una riga di codice 'Il tuo testo su più righe qui' Utilizza anche '\ n' per interrompere la linea da qualsiasi altro punto in cui la linea verrà automaticamente regolata.


-4

per me nessuna delle soluzioni non ha funzionato. So che non è una risposta completa a questa domanda, ma a volte può aiutare.

Ho inserito 4 visualizzazioni di testo in un linearlayout verticale.

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

Questa soluzione è utile nei casi in cui il testo della vista di testo sia costante, come le etichette.


1
Per favore, non farlo.
humble_wolf

-23

TextView sarà multilinea quando non avrà abbastanza spazio per adattarsi alla singola linea e singLine non impostato su true.

Se ottiene lo spazio su una riga non sarà multi-linea.


7
Cosa succede se desidero utilizzare fill_parent invece di larghezza fissa? Il mio contenuto è tagliato, se lo faccio ...
happyhardik,

6
Ci proverò android:singleLine="false"o android:inputType="textMultiLine"(come descritto da Marageus). Avviso che android:inputType="textMultiLine"ha la precedenza quando sono presenti entrambi
Romantic Electron,

Condividendo le opinioni degli altri che hanno commentato, questo è completamente sbagliato e sono sbalordito sul perché questa è la risposta accettata.
Aleks G,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.