Multi línea en un TextView Android con Kotlin


Si se requiere mostrar una cadena de texto que contiene varias líneas, se puede hacer con el componente TextView a continuación mostraré diferentes formas de crear saltos de línea.

Componente TextView

En la vista donde queremos mostrar el texto multi-línea con sus saltos de línea:

<TextView
    android:id="@+id/text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    android:text="@string/multi_line" />

Método 1, salto de línea con \n

La forma más simple es usar los carácteres de escape \n para crear un salto de línea, dentro de un recurso string

<string name="multi_line">
    Tras de esa cadena hay un \'salto de línea\'.\n
    Está línea también finaliza con un salto de línea.\n
    Después de esa línea hay un doble salto de línea.\n\n
    fin.</string>

Los caracteres especiales de escape
\n Salto de línea
\r Retroceso
\t Tabulación horizontal
\\ Contrabarra
\' Apóstrofe
\" Comillas dobles

Método 2, usar maqueteado HTML </br>

Otra forma de crear saltos de línea en un texto, es usando la marcado HTML, con la etiqueta </br> se puede realizar un salto de línea.

Para poder usar HTML dentro de un recurso string, el contenido se debe iniciar con el marcado especial, <![CDATA[ y finalizar ]]>

<string name="multi_line"><![CDATA[
    Tras de esa cadena hay un \'salto de línea\'.</br>
    Está línea también finaliza con un salto de línea.</br>
    Después de esa línea hay un <b>doble salto de línea</b>.</br></br>
    fin.]]></string>

Luego para setear el texto se requiere haceerlo des de código

val strHTML = getString(R.string.multi_line)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    binding.textviewFirst.text = Html.fromHtml(strHTML,Html.FROM_HTML_MODE_LEGACY)
} else {
    binding.textviewFirst.text  = Html.fromHtml(strHTML)
}

o bien para simplificar su implementación usar la siguiente extensión de kotlin

fun String?.toHtml(): Spanned? {
    if (this.isNullOrEmpty()) return null
    return HtmlCompat.fromHtml(this, HtmlCompat.FROM_HTML_MODE_COMPACT)
}

//su uso
binding.textviewFirst.text = getString(R.string.multi_line).toHtml()

Demostración

Publicado por Webserveis

Desarrollador freelance programador apasionado por el arte de programar, amante del auto aprendizaje y interesado por la tecnología en general.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: