wrap_content studio soporte sizes pesos para pantallas multiples layouts diferentes adaptable android textview android-layout android-ui sizing

studio - Dimensionar una vista de texto multilínea de Android



soporte para multiples pantallas android studio (4)

Tengo una actividad en la que quiero mostrar un encabezado que ocupa el cuarto superior de la aplicación y muestra un conjunto dinámico de texto. En algunos casos, todo encajará en una línea y me gustaría que el tamaño de la fuente aumente de tamaño para que sea grande y fácil de leer. En algunos casos, será en múltiples líneas (generalmente menos de 4) y debe ser más pequeño.

La complicación es que si configuro explícitamente las nuevas líneas en setText algunas veces insertará una nueva línea donde no esperaba una, es decir:

"My first line of text/nMy Second line of text" Might get turned into (it''s right adjusted in this version): "My first line of text My second line of text"

No estoy seguro de cómo evitar que TextView intente insertar nuevas líneas o dejar que se ocupe de formatear todo. Si configuro un texto para que sea una sola palabra larga, insertará una nueva línea en el medio en algún punto elegido. Y otras veces simplemente obtengo al azar las últimas líneas de texto.

¿Debo simplemente establecer explícitamente que el tamaño de la fuente sea realmente pequeño para que se distribuya correctamente y luego ajustar manualmente el tamaño? ¿Hay una ''mejor práctica'' que debería usar para esto? Si configuro el tamaño de fuente como una fuente razonablemente grande, funciona, pero sería bueno averiguar cuál sería la forma "correcta" de hacerlo. Y prefiero no tener que agregar manualmente 4 TextViews de una sola línea y formatearlos yo mismo.

El diseño xml que estoy usando es:

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_marginTop="10dip" android:layout_marginRight="8dip" android:singleLine="false" android:ellipsize="marque" android:gravity="right|bottom" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="30sp" />


Puedes hacerlo. Agregue un nuevo carácter de línea al valor de la cadena. A continuación, establezca este valor de cadena como el atributo de texto de TextView.

String temp = "ASDF /n"+"EFG /n"+"HIJ"; TextView tv=//find it from the context tv.setText(temp);


Déjame recapitular tu pregunta para asegurarte de que te entendí correctamente.

  1. su entrada es siempre de 1 a 4 líneas de texto
  2. siempre y solo quieres romper al final de una línea si tienes más de una línea
  3. ¿Quieres que cada línea sea lo más grande posible para que se ajuste a la vista de texto que es 1/4 de la pantalla de altura?

Propongo que hagas una vista personalizada :

  • use Paint.getTextBounds para determinar el mejor tamaño de texto dinámicamente en el código
  • para dibujar el texto puede usar la clase auxiliar StaticLayout para controlar la alineación y demás .
  • para que su vista personalizada ocupe 1/4 de la pantalla, colóquela dentro de LinearLayout y use layout_weight para asignarle su altura o configurarla programáticamente en View.onMeasure

Puede contar la longitud de la secuencia y establecer el tamaño del texto para que se ajuste al mejor tamaño para cada longitud

algo en esta forma

if(myString.length()==40){ myTextview.setTextSize(11); else if(myString.length()==25){ myTextview.setTextSize(16); ...

Espero que esto ayude.


Hay una solución más que puede usar WebView para hacer lo que quiera; consulte esta respuesta de Android TextView Justify Text para obtener más información. Al usar la vista web, no tiene que preocuparse por las alineaciones de línea, puede hacerlo mediante la propiedad html css.