Multiline TextView en Android?


154

Me gustó a continuación en 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>

No está funcionando multiliney estoy usando TableLayout...

Entonces, ¿qué error estoy haciendo aquí?

Respuestas:


197

Si el texto que está agregando TextViewes corto, no se expandirá automáticamente a cuatro líneas. Si desea TextViewque siempre tenga cuatro líneas, independientemente de la longitud del texto, establezca el android:linesatributo:

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

Puede hacer esto con TableRow, vea el código a continuación

<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
El OP no "quería que TextView siempre tuviera cuatro líneas, independientemente de la longitud del texto".
alquitrán el

77
Esta respuesta funcionó para mí. Pero obtuve los mejores resultados, no con maxlines y líneas, sino con maxlines y minlines y no utilicé líneas. Establezco minlines en 1 y maxlines más grandes que los datos más grandes. De esa manera obtengo 1 a N líneas para una vista compacta de los datos.
R Earle Harris

1
@REarleHarris: Yo también probé la misma solución, pero el problema es que no está tomando el conteo maxLines. Todos los datos se muestran en minLines count. ¿Qué puedo probar ahora? Estoy usando una vista de texto personalizada en el xml
Sagar Devanga

119

Solo pensé en agregar eso si usas:

android:inputType="textMultiLine"

Entonces la vista deja de ser cliqueable. Estaba tratando de obtener vistas de texto de varias líneas en mi menú de diapositivas que obviamente necesita responder a los clics.

El android:singleLine="false"bien trabajado sin embargo.


3
Esto no es exactamente correcto ya que los propios errores de pelusa de Android sugieren que solo use este atributo con EditText y no TextView.
Jared

1
¿Te refieres al texto Multilínea? Dije que no usara eso. singleLine está bien en TextViews: developer.android.com/reference/android/widget/…
Ryan

3
android: singleLine está en desuso ahora
Humberto Castañeda

¿Estás seguro? No menciona que en los documentos a los que me conecto en el comentario anterior, aunque acabo de ver que está marcado como tal en los documentos res. Es extraño que no lo mencionen en la página de TextView. El problema es que la solución alternativa que sugieren (multilínea) impide que se pueda hacer clic en la vista mientras pongo mi OP. developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android: singleLine = "false" está en desuso ya que es el valor predeterminado
Ashraf Alshahawy

28

No me gusta ninguna de las respuestas. Simplemente configure inputType y TextView se adaptará a su contenido

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

Probado en un Nexus One (2.3) y Nexus 4 (4.4)


52
android: inputType = "textMultiLine" no es para TextView, es para EditText y recibirá una advertencia si intenta hacerlo
bhaskarc

2
Deberías escuchar las advertencias. Use la solución @Ryans.
m02ph3u5

15

Simplemente ponga '\ n' dentro de su texto ... no se requiere atributo adicional :)

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

66
esta solución no se puede usar para configurar texto dinámicamente
Sagar Devanga

@SagarDevanga ¿Qué significa establecer texto dinámicamente?
Julio

3
@SagarDevanga, acabo de comprobar, los textos dinámicos y estáticos están multilínea por defecto (si se usa \n), por lo que es una solución correcta. No singleLine=false, no, lines=4etc.
CoolMind

10

Simplemente agregue textview en 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

No me gusta la solución que fuerza el número de líneas en la vista de texto. Prefiero sugerir que lo resuelva a través de la solución propuesta aquí . Como veo, el OP también está luchando para hacer que la vista de texto se vea como adecuada en la tabla y shrinkColumnses la directiva correcta para lograr lo que se desea.


5

Intente trabajar con EditText haciéndolo no cliqueable y fuera de foco, también puede mostrar una barra de desplazamiento y eliminar la barra inferior de EditText.
Aquí hay un ejemplo:

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

Espero que esto ayude :)


3

Primero reemplace "\n"con su Htmlequivalente y "&lt;br&gt;" luego invoque Html.fromHtml()la cadena. Siga los pasos a continuación:

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

Esto funciona perfectamente


2

Lo que aprendí fue agregar "\ n" entre las palabras donde desea que se detenga en la siguiente línea. Por ejemplo...

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

El \ n entre las 5pm y By me permitió tener más control de dónde quería que mi próxima línea comenzara y terminara.


2

La mejor respuesta que encontré para TextView multilínea es:

android:inputType="textMultiLine"

8
¿No es android:inputTypeun atributo para <EditText>no para <TextView>?
timtim

Aparece una advertencia si agrega este atributo a TextView. - Android atribuido: inputType = "textMultiLine" no debe usarse con <TextView>. En realidad, este atributo es para EditText.
Yhondri

2

puedes usar 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
Esto se muestra como una advertencia. No está destinado a ser utilizado para TextView
Stealth Rabbi

1
inputType solo es compatible con los componentes EditText.
Chamin Wickramarathna

1

Solía:

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

Funcionó para mí. 1 es el número de columna.


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

La manera más simple

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

Úselo \ndonde desee insertar una nueva línea Esperemos que lo ayude


0

La clave es una Vista de texto con singleline=false(que sí está en desuso, pero que debe funcionar) combinada 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

¿Por qué no declaras una cadena en lugar de escribir líneas largas en el archivo de diseño? Para esto, debe declarar una línea de código en el archivo de diseño 'android: text = "@ string / text"' e ir a \\ app \ src \ main \ res \ values ​​\ strings.xml y agregar una línea de código 'Su texto multilínea aquí' También use '\ n' para romper la línea desde cualquier otro punto, la línea se ajustará automáticamente.


-4

para mí ninguna de las soluciones no funcionó. Sé que no es una respuesta completa para esta pregunta, pero a veces puede ayudar.

Puse 4 vistas de texto en una distribución lineal vertical.

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

Esta solución es buena para los casos en que el texto de la vista de texto es constante, como las etiquetas.


1
Por favor no hagas esto.
humble_wolf

-23

TextView será de varias líneas cuando no tenga suficiente espacio para caber en una sola línea y singLine no esté establecido en verdadero.

Si obtiene el espacio en una línea, no será multilínea.


77
¿Qué pasa si quiero usar fill_parent en lugar de ancho fijo? Mi contenido se corta, si lo hago ...
happyhardik

66
Lo intentaré android:singleLine="false"o android:inputType="textMultiLine"(como lo describe Marageus). Aviso que android:inputType="textMultiLine"tiene prioridad cuando ambos están presentes
Romantic Electron

Al compartir las opiniones de otros que comentaron, esto es completamente incorrecto y estoy atónito de por qué esta es la respuesta aceptada.
Aleks G
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.