Android TextView Justificar texto

8 minutos de lectura

¿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.).

  • 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

Android TextView Justificar
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


1646967432 431 Android TextView Justificar
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

Android TextView Justificar
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

1646967433 261 Android TextView Justificar
mateo kurian

ACTUALIZADO

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

Comparación.png

  • 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.
ingrese la descripción de la imagen aquí

  • 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

Android TextView Justificar
franco cheng

Escribo una base de widgets en la vista de texto nativa para hacerlo.

github

1646967435 266 Android TextView Justificar

  • 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

1646967436 125 Android TextView Justificar
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:

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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad