Text en Jetpack Compose: da vida a tus textos

Antonio Leiva
Antonio Leiva
6 min lectura

Los textos son una parte imprescindible en cualquier interfaz de usuario, y por tanto es importante saber cómo usarlos y sacarles el máximo partido.

https://youtu.be/yu6rxgBEh1Y

En Jetpack Compose, el Composable encargado de renderizar texto se llama simplemente Text (a diferencia del sistema clásico, donde era TextView).

En realidad, existe una versión más básica llamada BasicText, que no aplica las guías de estilo de Material, pero que en general no vamos a necesitar.

Logo de Compose Expert: silueta de un samurái con el icono de Jetpack Compose sobre un círculo azul

¡Atención! Si quieres aprender Jetpack Compose a fondo, con todo el contenido en vídeo organizado, soporte y extras, echa un vistazo a Compose Expert.

Ya hemos visto que mostrar un texto es muy fácil, solo necesitamos pasarle el texto a mostrar como argumento:

@Composable
fun Greeting(name: String) {
    Text("Hello $name!")
}

Si lo que queremos es obtener un string de los resources de Android, solo tenemos que usar la función stringResource():

Text(stringResource(R.string.hello_world))

Pero si te fijas, Text tiene muchos argumentos más, por lo que se pueden configurar de infinidad de formas:

Firma de la función Text con sus parámetros: color, fontSize, fontStyle, fontWeight, maxLines, style y más

text ya sabemos como funciona, y de Modifier ya tenemos un artículo entero. Así que vamos a ir viendo los siguientes:

color

Permite modificar el color de la fuente. Ya hemos visto que tenemos varios colores por defecto en el objeto Color:

Text(
    text = "Hello World",
    color = Color.Red
)

Preview TextSample con el texto Hello World en color rojo

Color por supuesto tiene constructores para definir colores de distintas formas:

Autocompletado de Android Studio con los constructores de Color: Float RGBA, Int, Int RGBA, Long y ULong

fontSize

Permite definir el tamaño de la fuente. El tipo es TextUnit, que permite definir el tamaño tanto en dp como en sp.

Text(
    text = "Hello World",
    fontSize = 25.sp
)

Preview TextSample con Hello World en un tamaño de fuente de 25sp

fontStyle

El estilo de fuente simplemente permite definir si el texto estará en cursiva (o itálica) o normal

Text(
    text = "Hello World",
    fontStyle = FontStyle.Italic
)

Preview TextSample con el texto Hello World en cursiva

fontWeight

Define el peso de la fuente. La clásica negrita, pero a día de hoy las fuentes permiten definir varios niveles. Así que el Text también está adaptado para esto.

Hay un montón de opciones. Nosotros por ejemplo vamos a configurar ExtraBold:

Text(
    text = "Hello World",
    fontWeight = FontWeight.ExtraBold
)

fontFamily

Permite definir la fuente que el texto va a usar. Esto tiene su complejidad, así que también vamos a necesitar un artículo aparte. Déjame en comentarios si quieres que escriba sobre ello.

En cualquier caso hay varias fuentes genéricas que podemos utilizar:

Autocompletado de Android Studio con las fuentes de FontFamily: Cursive, Default, Monospace, SansSerif y Serif

Por ejemplo, si usamos Monospace:

Text(
    text = "Hello World",
    fontFamily = FontFamily.Monospace
)

Obtenemos esto:

Preview de un Text con Hello World en fuente monoespaciada

letterSpacing

Identifica el espacio entre letras. Se puede indicar tanto en dp como en sp. Por ejemplo:

Text(
    text = "Hello World",
    letterSpacing = 5.sp
)

Preview de un Text con Hello World y las letras muy separadas por letterSpacing de 5.sp

textDecoration

Decoraciones extra para el texto, como tachado, subrayado, o incluso se pueden definir combinaciones de ambas.

Text(
    text = "Hello World",
    textDecoration = TextDecoration.LineThrough
)

Preview de un Text con Hello World tachado mediante TextDecoration.LineThrough

textAlign

Alineación del texto en el párrafo: izquierda, derecha, centrado, justificado…

Autocompletado de TextAlign con las opciones Center, End, Justify, Left, Right y Start

He cambiado el texto a uno más largo para que podamos ver este y alguno de los siguientes:

Text(
    text = stringResource(id = R.string.lorem),
    textAlign = TextAlign.End
)

Preview con un párrafo de Lorem ipsum alineado a la derecha con TextAlign.End

lineHeight

Altura de línea, sirve para separar más o menos las líneas entre sí. Se pueden utilizar sp y em. Los em identifican el tamaño de la letra: 1 em es igual a la altura de la fuente.

Si dejamos 2em:

Text(
    text = stringResource(id = R.string.lorem),
    lineHeight = 2.em
)

Preview con un párrafo de Lorem ipsum con líneas muy separadas por un lineHeight de 2em

maxLines, textOverflow y softWrap

Estos tres funcionan en conjunto. Imaginemos que indicamos que el número de líneas máximos es de 1:

Text(
    text = stringResource(id = R.string.lorem),
    maxLines = 1
)

Solo veríamos una línea, con el resto del texto cortado:

Preview con el texto Lorem ipsum limitado a una línea y cortado tras la última palabra completa

¿Cómo definimos la forma de cortarlo? Por defecto softWrap es true, lo que indica que cortará por la última palabra completa, pero lo podemos desactivar:

Text(
    text = stringResource(id = R.string.lorem),
    maxLines = 1,
    softWrap = false
)

Preview con el texto Lorem ipsum en una línea cortado a mitad de palabra al desactivar softWrap

Por defecto el texto se corta con TextOverflow.Clip, lo que quiere decir que simplemente se corta donde está, pero podemos usar TextOverflow.Ellipsis, y se cortará con puntos suspensivos…

Text(
    text = stringResource(id = R.string.lorem),
    maxLines = 1,
    softWrap = false,
    overflow = TextOverflow.Ellipsis
)

Preview con el texto Lorem ipsum en una línea terminado en puntos suspensivos con TextOverflow.Ellipsis

onTextLayout

Es un listener que nos devuelve un TextLayoutResult cuando la disposición del texto termina de calcularse.

Devuelve un montón de información sobre cómo se ha mostrado el texto, si hubo overflow, número de líneas, tamaño, y un largo etcétera.

Se puede usar para añadir funcionalidad extra, decoraciones al texto y otro tipo de detalles. Si te interesa un artículo sobre esto, házmelo saber también en los comentarios, porque es un tema complejo para tratarlo aquí.

style

Todos estos parámetros que hemos visto, e incluso algunos más, se pueden configurar directamente en este style. Muchos de ellos no tendrás que usarlos casi nunca, así que no vamos a entrar a fondo.

Pero sí que es interesante saber que gracias a este estilo, podemos aplicar de forma sencilla las tipografías definidas en el tema.

Si te vas a Type.kt, verás que hay definido un objeto Typography. Eso objeto permite definir todos los niveles de tipografía especificados por las guías de Material Design.

Si no se configura, utilizará los valores por defecto. En ese archivo puedes ver algunos ejemplos.

Todas las tipografías del tema se pueden usar de forma muy sencilla desde MaterialTheme.typography. Por ejemplo:

Text(
    text = "Hello World",
    style = MaterialTheme.typography.h4
)

Preview de un Text con Hello World en tamaño grande usando el estilo h4 del tema

Si necesitas usar una tipografía, pero aplicándole algún cambio, puedes usar la función copy de las data class. Vamos a aplicar una sombra:

Text(
    text = "Hello World",
    style = MaterialTheme.typography.h4.copy(
        shadow = Shadow(
            offset = Offset(10f, 10f),
            blurRadius = 10f
        )
    )
)

Preview de Hello World con estilo h4 y una sombra difuminada desplazada

Aplicando lo aprendido a nuestro ejemplo

Aquí tampoco vamos a hacer muchos cambios. Simplemente le vamos a aplicar una tipografía al título:

Text(
    text = "Title 1",
    style = MaterialTheme.typography.h6
)

Preview de MediaItem con un bloque rojo y debajo una franja turquesa con el título Title 1 en estilo h6

Con esto que has aprendido hoy vas a poder configurar cualquier texto que se te presente para que se adapte a las necesidades del diseño.

Pero esto se nos está quedando ya un poco cojo sin poder cargar imágenes. Así que en el próximo artículo vamos a hablar sobre cómo mostrar imágenes y drawables en Jetpack Compose.

Si quieres aprender todo este contenido con soporte y extras, echa un vistazo a Compose Expert.

Laboratorio

Lo último que hemos probado con agentes

Probamos herramientas, modelos y flujos en proyectos reales, y contamos qué funciona y qué no. Sin humo.

Ir al blog
zsh — devexpert

$git log --oneline blog/

$ git show 7bb9632

commit 7bb9632

Autor: Antonio Leiva · 2026-10-19 · 8 min

Claude Code ya lee AGENTS.md, pero solo como plan B. Prueba controlada con una palabra clave por fichero: qué se carga al empezar, qué pasa con las subcarpetas, el global y los cuatro modos del plugin.

$ ▊