¿Cómo se obtiene el texto de un TextView
justificarse (con el texto alineado en los lados izquierdo y derecho)?
Encontré una posible solución. aquípero no funciona (incluso si cambia el centro vertical a center_vertical, etc.).
¿Cómo se obtiene el texto de un TextView
justificarse (con el texto alineado en los lados izquierdo y derecho)?
Encontré una posible solución. aquípero no funciona (incluso si cambia el centro vertical a center_vertical, etc.).
CommonsWare
No creo que Android admita la justificación completa.
ACTUALIZACIÓN 2018-01-01: Android 8.0+ admite modos de justificación con TextView
.
Tras un análisis más detallado, podría darle una oportunidad a android:gravity=”fill_horizontal”. Eso se describe como “Hacer crecer el tamaño horizontal del objeto si es necesario para que llene completamente su contenedor”, pero no sé cómo “hacen crecer” el texto.
– CommonsWare
18 de agosto de 2009 a las 12:35
android:gravity=”fill_horizontal” tampoco funcionó. Parece que Android no admite la justificación después de todo, bueno 🙂
– usuario130076
19 de agosto de 2009 a las 11:37
No, no puede establecer la propiedad como la gravedad. Pero aún puede establecer la justificación de su texto tomando la vista web en lugar de la vista de texto. Puedes referirte a seal.io/2010/12/only-way-how-to-align-text-in-block-in.html. (Robado de stackoverflow.com/questions/5976627/…)
– jcaruso
17 mayo 2013 a las 21:57
@CommonsWare Ahora, ¿alguna forma adecuada de justificar el texto?
– Juan R.
11 de febrero de 2014 a las 10:58
Hombre, estoy viviendo con una vista web pesada para lograr esto, y créanme, mi interfaz de usuario pide a gritos que se agreguen algunas cosas nuevas a la API, porque es muy lento para componentes como el chat en una vista de lista.
– nobalG
28 de diciembre de 2016 a las 10:06
llanojimbo
La respuesta de @CommonsWare es correcta. Android 8.0+ admite “Justificación completa” (o simplemente “Justificación”, como a veces se le llama ambiguamente).
Android también es compatible con “Alineación de texto a la izquierda/derecha”. Ver el artículo de wikipedia sobre Justificación por la distinción. Mucha gente considera que el concepto de ‘justificación’ abarca la justificación completa así como la alineación de texto izquierda/derecha, que es lo que terminan buscando cuando quieren hacer la alineación de texto izquierda/derecha. Esta respuesta explica cómo lograr la alineación de texto izquierda/derecha.
Es posible lograr la alineación de texto a la izquierda/derecha (a diferencia de la justificación completa, como se hace en la pregunta). Para demostrarlo, usaré un formulario básico de 2 columnas (etiquetas en la columna de la izquierda y campos de texto en la columna de la derecha) como ejemplo. En este ejemplo, el texto de las etiquetas de la columna de la izquierda se alineará a la derecha para que aparezcan alineados con los campos de texto de la columna de la derecha.
En el diseño XML, puede hacer que los elementos de TextView (la columna de la izquierda) se alineen a la derecha agregando el siguiente atributo dentro de todos los TextViews:
<TextView
...
android:layout_gravity="center_vertical|end">
...
</TextView>
Sin embargo, si el texto se ajusta a varias líneas, el texto aún estaría alineado a la izquierda dentro de TextView. Agregar el siguiente atributo hace que el texto real quede alineado a la derecha (irregular a la izquierda) dentro de TextView:
<TextView
...
android:gravity="end">
...
</TextView>
Entonces el gravedad atributo especifica cómo alinear el texto dentro de TextView diseño_gravedad especifica cómo alinear/diseñar el propio elemento TextView.
Si lo entiendo correctamente, y dados los resultados de probar esto, todo lo que hace es alinear el texto a la izquierda o a la derecha. Esto no justifica el texto, ¿verdad?
–Paul Lammertsma
12 de septiembre de 2011 a las 7:31
Excelente. Solo para agregar, si desea una justificación central, puede hacerlo android:layout_gravity="center_horizontal|center"
android:gravity="center"
.
– Luis A. Florit
8 de diciembre de 2012 a las 5:33
Esto es solo alineación, no justificación. Lee atentamente ese enlace de Wikipedia. La diferencia entre los distintos tipos de justificación sólo afecta a la última línea de un párrafo. No hay justificación izquierda/derecha/centro para los párrafos que solo tienen una línea.
– Karu
30 de enero de 2016 a las 8:45
entonces, ¿por qué incluso responder aquí si no se trata de justify
– usuario924
15 oct 2018 a las 15:24
Se trata de alineación izquierda o derecha, no de justificación (como en MS Word). La terminología formal no es útil aquí, entiende lo que significa la pregunta.
– Shuvo Sarker
29 de febrero de 2020 a las 6:44
jaydipsinh zala
TextView
en Android O ofrece justificación completa (nueva alineación tipográfica) en sí mismo.
Solo necesitas hacer esto:
kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
textView.justificationMode = JUSTIFICATION_MODE_INTER_WORD
}
Java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
textView.setJustificationMode(JUSTIFICATION_MODE_INTER_WORD);
}
XML
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:justificationMode="inter_word" />
El valor predeterminado es JUSTIFICATION_MODE_NONE
(none
en xml).
Esperemos que se vuelva a portar a la biblioteca de soporte, entonces O 🙂
– Stefan Haustein
25 de abril de 2017 a las 18:39
¡Por favor agregue la biblioteca aquí!
– Kunal Dharaiya
29 de mayo de 2017 a las 10:29
¿Cómo justificar el uso de XML?
– Vikash Parajuli
2 de marzo de 2018 a las 3:31
Puede usar android:justificationMode=”inter_word” en xml.
– Cristian D.
13 de marzo de 2018 a las 15:20
Se requiere API 26 para android:justificationMode.
– Bink
7 dic 2018 a las 22:55
mateo kurian
Hemos creado una clase simple para esto. Actualmente existen dos métodos para lograr lo que buscas. Ambos requieren SIN VISTA WEB y SOPORTES ESPACIALES.
BIBLIOTECA: https://github.com/bluejamesbond/TextJustify-Android
SOPORTES: Android 2.0 a 5.X
CONFIGURACIÓN
// Please visit Github for latest setup instructions.
CAPTURA DE PANTALLA
Buena solución aquí. FWIW no necesita la mayor parte del html adicional. La etiqueta del cuerpo con alineación de texto es suficiente.
– gnac
31 de agosto de 2011 a las 4:10
Esto funciona bien. Tenga en cuenta que puede hacer que el fondo sea transparente siguiendo view.loadData()
con view.setBackgroundColor("#00000000")
.
–Paul Lammertsma
12 de septiembre de 2011 a las 21:09
Sin embargo, no he tenido éxito en hacer que cargue una fuente/tipo de letra personalizado. He intentado esto y esta sugerencia, sin suerte.
–Paul Lammertsma
12 de septiembre de 2011 a las 21:16
Como mencioné en esos hilos, encontré una solución: si crea un archivo HTML y lo coloca en los activos, cargándolo a través de view.loadUrl()
funciona, mientras que view.loadData()
no. No tengo ni idea de por qué este último no lo hace.
–Paul Lammertsma
12 de septiembre de 2011 a las 22:13
@PaulLammertsma, setBackgroundColor(0x00000000) preferiría ser el formato correcto para configurar el fondo transparente.
– richey
1 de enero de 2013 a las 20:48
Puedes usar JustifiedTextView para Android proyecto en github. esta es una vista personalizada que simula texto justificado para usted. Es compatible con Android 2.0+ e idiomas de derecha a izquierda.
no admite cadenas expandibles
– MSepehr
04/07/2015 a las 22:05
¿Cómo podemos añadir nuestro propio texto?
– Karan
5 de julio de 2015 a las 12:07
Por favor, vea la muestra en github.
– Saeed Zarinfam
5 de julio de 2015 a las 12:19
hola Saeed, tnx por tu ayuda, ¿hay alguna forma de admitir vistas de texto ampliables?
–Hamid Reza
21 de julio de 2015 a las 11:50
@SaeedZarinfam Intenté usar “JustifiedTextView para Android”, pero recibí un error en la etiqueta xml ir.noghteh.JustifiedTextView, ¿podría ayudarme con esta pregunta? stackoverflow.com/questions/37911376/…
– Jumong
19 de junio de 2016 a las 23:22
franco cheng
no admite cadenas expandibles
– MSepehr
04/07/2015 a las 22:05
¿Cómo podemos añadir nuestro propio texto?
– Karan
5 de julio de 2015 a las 12:07
Por favor, vea la muestra en github.
– Saeed Zarinfam
5 de julio de 2015 a las 12:19
hola Saeed, tnx por tu ayuda, ¿hay alguna forma de admitir vistas de texto ampliables?
–Hamid Reza
21 de julio de 2015 a las 11:50
@SaeedZarinfam Intenté usar “JustifiedTextView para Android”, pero recibí un error en la etiqueta xml ir.noghteh.JustifiedTextView, ¿podría ayudarme con esta pregunta? stackoverflow.com/questions/37911376/…
– Jumong
19 de junio de 2016 a las 23:22
dos vecesYuan
Encontré una manera de resolver este problema, pero esto puede no ser muy elegante, pero el efecto no es malo.
Su principio es reemplazar los espacios de cada línea por el ImageSpan de ancho fijo (el color es transparente).
public static void justify(final TextView textView) {
final AtomicBoolean isJustify = new AtomicBoolean(false);
final String textString = textView.getText().toString();
final TextPaint textPaint = textView.getPaint();
final SpannableStringBuilder builder = new SpannableStringBuilder();
textView.post(new Runnable() {
@Override
public void run() {
if (!isJustify.get()) {
final int lineCount = textView.getLineCount();
final int textViewWidth = textView.getWidth();
for (int i = 0; i < lineCount; i++) {
int lineStart = textView.getLayout().getLineStart(i);
int lineEnd = textView.getLayout().getLineEnd(i);
String lineString = textString.substring(lineStart, lineEnd);
if (i == lineCount - 1) {
builder.append(new SpannableString(lineString));
break;
}
String trimSpaceText = lineString.trim();
String removeSpaceText = lineString.replaceAll(" ", "");
float removeSpaceWidth = textPaint.measureText(removeSpaceText);
float spaceCount = trimSpaceText.length() - removeSpaceText.length();
float eachSpaceWidth = (textViewWidth - removeSpaceWidth) / spaceCount;
SpannableString spannableString = new SpannableString(lineString);
for (int j = 0; j < trimSpaceText.length(); j++) {
char c = trimSpaceText.charAt(j);
if (c == ' ') {
Drawable drawable = new ColorDrawable(0x00ffffff);
drawable.setBounds(0, 0, (int) eachSpaceWidth, 0);
ImageSpan span = new ImageSpan(drawable);
spannableString.setSpan(span, j, j + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
builder.append(spannableString);
}
textView.setText(builder);
isJustify.set(true);
}
}
});
}
Pongo el código en GitHub:
https://github.com/twiceyuan/TextJustificación
Visión de conjunto:
No funciona en la vista previa XML pero funciona muy bien con un dispositivo real 🙂
– pgreze
15 de marzo de 2018 a las 3:22
solo funciona si TextView no contiene ningún formato desafortunadamente.
– richey
22 de octubre de 2020 a las 3:15
Funciona bien en Android 11, usando Kotlin.
– tanrobles
5 de febrero de 2021 a las 3:40
La respuesta de @Jimbo es correcta, definitivamente funciona para mi caso en texto de entrada y vista de texto para el idioma árabe de entrada y visualización de derecha a izquierda, pero para el texto de entrada tuve que agregar también gravity=”right”
– compartir
21 de diciembre de 2012 a las 16:33
puedes usar github.com/pouriaHemmati/JustifiedTextView
– Pouria Hemati
13 de julio de 2019 a las 11:37
github.com/amilcar-sr/JustifiedTextView puede ser usado
– Reejesh PK
3 de julio de 2021 a las 15:49