2011-01-31 32 views
53

¿Alguien sabe cómo ajustar texto en TextView en la plataforma Android. es decir, si el texto en la vista de texto excede la longitud de la pantalla, debe aparecer en la segunda línea.cómo ajustar texto en textview en android

he buscado y probado el siguiente:

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

Pero ninguno trabaja ..

Puede alguien sugerir cómo puedo hacerlo .. Yo soy relativamente nuevo en la plataforma androide ..

+3

TextViews debe ajustar la palabra de forma predeterminada. ¿Puedes publicar todo tu diseño? – danh32

+0

¿Por casualidad es la vista de texto dentro de un diseño de tabla? Si es así, tengo una respuesta para ti. – JohnFx

Respuesta

0

es necesario agregar el TextView en un ScrollView con algo como esto:

<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

Gracias por su respuesta, pero mi objetivo es envolver el texto cuando excede la longitud de la línea para no poner un desplazamiento horizontal. – Sameer

9

Debe utilizar 2 parámetros:

  • android:ellipsize="none": el texto no se corta por la anchura TextView

  • android:scrollHorizontally="false" el texto se ajusta en tantas líneas como sea necesario

+3

Eso no funciona para mí. (FWIW, tengo un TextView en un TableRow en TableLayout.) – aij

0

lo suficientemente extraño - Creé mi TextView en Código y lo envolví, a pesar de que no configuré nada excepto cosas estándar, pero compruébalo tú mismo:

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

Como puede ver en la definición de params, estoy usando LinearLayout. La etiqueta de clase simplemente extiende TextView, no haciendo nada allí excepto configurar el tamaño de fuente y el color de fuente.

Al ejecutarlo en el emulador (nivel API 9), automáticamente envuelve el texto en 3 líneas.

+0

Tenga en cuenta el uso de este código 'LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);'. Lo más probable es que el envoltorio que usted considere sea "automágico" – nemesisfixx

5

Esto debería solucionar su problema: android:layout_weight="1".

+0

Esto solo hace que el TextView se expanda para ocupar tanto espacio como sea posible, que es lo mismo que establecer Height en 'match_parent'. No es exactamente lo mismo que OP quería. –

+0

En el caso de TableLayout, 'layout_weight =" 1 "' solucionó el problema. Sin embargo, mi TableRow que contiene TextView, tenía 'layout_height' establecido en un valor específico. Tal vez será útil para alguien – kit

43

Para mí este problema sólo se produjo en Android 4.0 <

La combinación de parámetros que utilicé fueron:

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

Los maxLines recuento parecía ser la última pieza al azar que hizo que mi envoltura TextView.

+7

Sé que es un hilo viejo ahora, pero pensé que publicaría mis conclusiones. Solo usé el 'android: maxLines' y luego envolví mi texto. Cheer @Guykun – StuStirling

+0

De nuevo, esto equivale a simplemente establecer el alto de TextView en 'match_parent', que no es lo mismo que hacer que la altura de TextView se expanda para incluir las líneas adicionales. –

5

OK chicos la verdad está en algún lugar en el medio porque tienes que ver el problema desde la vista de los padres y la del niño. La solución a continuación sólo funciona cuando el modo de ruleta = dialog independientemente de la versión de Android (no hay problema .. probó en VD y deseos con Android => 2.2):

  1. .Establecer que spinner de (el padre) el modo como:

    android:spinnerMode="dialog" 
    
  2. SET (vista personalizada del niño) de la TextView propiedades a:

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

Espero que esto funcione para usted también .

+0

Ha intentado tantas cosas para que funcione en modo 'desplegable' pero nada funcionó. Ahora se estableció en el modo 'diálogo'. – Mangesh

1

Configurando android:maxEms a un valor dado junto con android:layout_weight="1" hará que la vista de texto se ajuste una vez que alcanza la longitud dada del ccsme.

0

Estoy usando Android 2.2 y mi vista de texto pasará automáticamente a la siguiente línea si supera la pantalla.

Si desea que el texto pase a la siguiente línea antes del final de la pantalla, solo agregue (solo coloque su propio valor de dp). Esto será útil si tiene una imagen a la derecha del texto.

android:layout_marginRight="52dp" 
24

Para el caso en que el TextView está dentro de un TableLayout, la solución es establecer android:shrinkColumns="1" en la TableLayout. (Reemplace 1 con el número de columna en el que está envuelto TextView (0-indexado))

AFAICT, no se necesitan otros atributos en el TextView.

Para otros casos, consulte las otras respuestas aquí.

Fwiw, me había metido en un principio para ordenar de trabajo con

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

pero que dio lugar a un espacio vacío adicional en la parte inferior del diálogo que estaba todo en.

+0

¡Esto era lo que estaba buscando! De lo contrario, mis palabras se cortan –

-1

Yo sé que es tarde , pero podría ayudar a alguien más. Sólo hay que establecer el ancho de 0DP

<TextView 
     android:layout_width="0dp" 
     .../> 
+1

Esto tiene que ser una broma, ¿verdad? –

+0

No, no es una broma, funcionó para mí ... !!! –

0

Try @ enfoque de Guykun y asegúrese de que los padres anchura no está configurado para envolver el contenido. Esto es lo que me estaba perdiendo.

-1

Es realmente muy fácil. Simplemente escriba: + "\ n" donde desee una palabra

+0

hay muchos problemas con esto, entre los que se incluye el manejo de texto dinámico de las respuestas de la API de red, las bases de datos, la localización ... –

2

En Android Studio 2.2.3 bajo la propiedad inputType hay una propiedad llamada textMultiLine. Seleccionar esta opción solucionó un problema similar para mí. Espero que eso ayude.

+0

Esto es para EditText, no Textview –

0

Tuve el mismo problema. Tras el cambio lo hizo el trabajo -

android:layout_width="wrap_content" 

Los puntos suspensivos, maxLines o layout_weight - todo no hizo ninguna diferencia. Nota: El ancho principal también se establece como wrap_content.

8

restricción Disposición

<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"/> 
  • Asegúrese de que el ancho de la disposición es cero
  • limitaciones izquierda/derecha se definen
  • altura disposición de wrap_content permite la expansión hacia arriba/abajo.
  • Conjunto android:maxLines="2" para evitar la expansión vertical (2 es solo una e.g.)
  • Ellipses son prob. una buena idea con líneas max android:ellipsize="end"

0DP ancho permite restricciones izquierda/derecha para determinar el ancho de tu widget es.

Establecer las restricciones izquierda/derecha establece el ancho real de su widget, dentro del cual se ajustará el texto.

Constraint Layout docs

+0

¡Sí! ¡Así es exactamente como funciona! Solo asegúrate de configurar el ancho a 0dp –

0

Sólo estaba trabajando en un TextView dentro de un diseño interior de un RecyclerView. Me cortaron el texto, por ejemplo, Read this message, vi: Read this. Intenté configurar android:maxLines="2" en TextView, pero nada cambió. Sin embargo, android:lines="2" dio como resultado Read this en la primera línea y message en la 2da.