Come avvolgere il testo nella visualizzazione testo in Android


86

Qualcuno sa come avvolgere il testo in TextView nella piattaforma Android. cioè, se il testo in Textview supera la lunghezza dello schermo, dovrebbe essere visualizzato nella seconda riga.

Ho cercato e provato quanto segue:

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

Ma nessuno funziona ..

Qualcuno può suggerire come posso farlo.


7
TextView dovrebbe andare a capo automatico per impostazione predefinita. Puoi pubblicare l'intero layout?
danh32

Per caso la Textview è all'interno di un layout di tabella? Se è così ho una risposta per te.
JohnFx

1
Nel mio caso, dopo aver aggiunto circa una mezza dozzina di attributi (descritti di seguito) per forzare la visualizzazione del testo a disporre il testo su più righe, senza successo, ho notato che avevo un attributo android:inputType="textPersonName". Apparentemente era stato aggiunto dallo strumento di progettazione Android Studio. La rimozione di quell'attributo ha risolto il problema! Potrebbero esserci altri tipi di input che impediscono anche il wrapping.
LarsH

Risposte:


57

Per me questo problema si è verificato solo su Android <4.0

La combinazione di parametri che ho usato è stata:

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

Il conteggio maxLines sembrava essere il pezzo finale casuale che ha reso il mio TextView avvolgente.


9
So che è un vecchio thread ora, ma ho pensato di pubblicare i miei risultati. Ho usato solo "android: maxLines" e poi ha avvolto il mio testo. Cheer @Guykun
StuStirling

Ancora una volta, questo equivale a impostare semplicemente l'altezza di TextView match_parent, che non è la stessa cosa che espandere l'altezza di TextView per includere le linee extra.
SMBiggs

52

Layout vincolato

<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"/>
  • Assicurati che la larghezza del layout sia zero
  • vengono definiti i vincoli sinistra / destra
  • l'altezza del layout di wrap_content consente l'espansione su / giù.
  • Impostato android:maxLines="2"per impedire l'espansione verticale (2 è solo un eg)
  • Le ellissi sono prob. una buona idea con le linee maxandroid:ellipsize="end"

La larghezza di 0dp consente ai vincoli sinistra / destra di determinare la larghezza del widget.

L'impostazione dei vincoli sinistra / destra imposta la larghezza effettiva del widget, all'interno della quale il testo andrà a capo.

Documenti layout vincoli


Sì! Funziona esattamente così! Assicurati solo di impostare la larghezza su 0dp
Yoraco Gonzales

l'impostazione dei vincoli sinistro e destro mi ha aiutato a avvolgere il testo, invece del testo che trabocca oltre i limiti di destra
Jia Tse

31

Nel caso in cui TextViewsia all'interno di a TableLayout, la soluzione è impostare android:shrinkColumns="1"su TableLayout. (Sostituisci 1con il numero di colonna in cui si trova il TextView che desideri racchiudere. (0-indicizzato))

AFAICT, non sono necessari altri attributi in TextView.

Per altri casi, vedere le altre risposte qui.

FWIW, avevo inizialmente avuto modo di lavorare con

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

ma questo ha portato a uno spazio vuoto in più nella parte inferiore della finestra di dialogo in cui si trovava tutto.


Questo era quello che stavo cercando! Altrimenti le mie parole sono troncate
Carson Holzheimer

12

Devi utilizzare 2 parametri:

  • android:ellipsize="none" : il testo non viene tagliato sulla larghezza della vista testo

  • android:scrollHorizontally="false" il testo va a capo su tante righe quante sono necessarie


5
Non funziona per me. (FWIW, ho un TextView in una TableRow in un TableLayout.)
aij

8

Usa app:breakStrategy="simple"in AppCompatTextView, controllerà il layout del paragrafo.

Ha tre valori costanti

  • equilibrato
  • alta qualità
  • semplice

Progettare nel tuo XML TextView

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

Se il tuo attuale livello API minimo è 23 o più, allora in Coding

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

Per ulteriori informazioni fare riferimento a questa BreakStrategy

Textview breakStrategy immagine


7

Questo dovrebbe risolvere il problema: android:layout_weight="1".


Ciò fa sì che il TextView si espanda per occupare più spazio possibile, che equivale a impostare l'altezza su match_parent. Non proprio la stessa cosa che voleva OP.
SMBiggs

1
Nel caso di TableLayout, layout_weight="1"ho risolto il problema per me. Tuttavia, il mio TableRow che contiene TextView, era layout_heightimpostato su un valore specifico. Forse sarà utile per qualcuno
kit

5

Ok ragazzi, la verità è da qualche parte nel mezzo, perché devi vedere il problema dal punto di vista dei genitori e del bambino. La soluzione seguente funziona SOLO quando la modalità spinner = dialogindipendentemente dalla versione di Android (nessun problema lì .. l'ho testata in VD e DesireS con Android => 2.2):

  1. . Imposta la modalità del tuo spinner (genitore) come:

    android:spinnerMode="dialog"  
    
  2. Imposta le proprietà della textview (visualizzazione personalizzata figlio) su:

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

Spero che funzioni anche per te.


Ho provato tante cose per farlo funzionare in modalità "menu a discesa" ma non ha funzionato. Ora stabilisci la modalità "dialogo".
Mangesh

4

Impostando android:maxEmsun dato valore insieme a android:layout_weight="1", TextView andrà a capo una volta raggiunta la lunghezza data dell'em.


Funziona anche per TextView posizionato in RelativeLayout.
ayz4sci

ho cercato per ore, grazie funziona benissimo anche su constraintLayout
TarekB

3

In Android Studio 2.2.3 sotto la inputTypeproprietà è presente una proprietà chiamata textMultiLine. La selezione di questa opzione ha risolto un problema simile per me. Spero che aiuti.


2
Questo è per EditText, non Textview
PsychedelicSubstance

2

Stavo solo lavorando su un TextView all'interno di un layout all'interno di un RecyclerView. Avevo testo sempre tagliati fuori, ex, per Read this message, ho visto: Read this. Ho provato a impostare android:maxLines="2"TextView, ma non è cambiato nulla. Tuttavia, è android:lines="2"risultato in Read thisprima linea e messagein seconda.


1

Ho avuto lo stesso problema. A seguito della modifica ha funzionato -

android:layout_width="wrap_content"

I puntini di sospensione, maxLines o layout_weight non hanno fatto alcuna differenza. Nota: anche la larghezza principale è impostata come wrap_content.


1

Tutto quello che devi fare è impostare la larghezza della visualizzazione del testo .

android: layout_width = "60dp"

puoi modificare la larghezza a tua scelta. Basta digitare una frase lunga per verificare se funziona in questo modo

android: text = "voglio essere un ingegnere di software di livello mondiale"


1

Prova l'approccio di @ Guykun

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

Inoltre, assicurati che la larghezza dei genitori non sia impostata per avvolgere il contenuto. Questa è la cosa che mi mancava.


0

Sto usando Android 2.2 e il mio textview passerà automaticamente alla riga successiva se supera lo schermo.

Se desideri che il testo vada alla riga successiva prima della fine dello schermo, aggiungi semplicemente (inserisci il tuo valore dp). Questo sarà utile se hai un'immagine a destra del testo.

android:layout_marginRight="52dp"

0

Abbastanza strano - ho creato il mio TextView in Code ed è stato eseguito il wrapping - nonostante non abbia impostato nulla tranne le cose standard - ma guarda tu stesso:

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

Come puoi vedere dalla definizione dei parametri, sto usando un LinearLayout. La classe Label estende semplicemente TextView, senza fare nulla se non impostare la dimensione del carattere e il colore del carattere.

Quando viene eseguito nell'emulatore (API livello 9), avvolge automaticamente il testo su 3 righe.


Notare l'uso di questo codice LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);. Molto probabilmente è il wrapping che consideri "automagico"
nemesisfixx

0

Basta impostare layout_withuna dimensione definita , quando il testo riempirà la larghezza massima, andrà in overflow alla riga successiva causando un effetto di avvolgimento.

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

0

Il trucco è con la larghezza textView, prova a renderlo un numero dedicato come:

<TextView
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

Ho provato molte soluzioni senza alcun risultato, ho provato:

    android:ellipsize="none"
    android:scrollHorizontally="false"

l'unica cosa che ha attivato l'opzione wrap è la larghezza dedicata


-1

Devi aggiungere il tuo TextView in un ScrollView con qualcosa del genere:

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

4
Grazie per la risposta Ma il mio scopo è quello di avvolgere il testo quando supera la lunghezza della riga per non mettere uno scroller orizzontale.
Sameer
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.