Saltar a contenido

7.2 Recursos, idiomas y modo oscuro

Los recursos de la app

Todo lo que no es código vive en app/src/main/res/:

Carpeta Contiene
drawable/ Imágenes y dibujos vectoriales
mipmap-*/ Iconos de la app
values/ Textos (strings.xml), colores, medidas
font/ Tipografías
raw/ Audio y otros archivos

Textos en strings.xml

Nunca escribas un texto visible directamente en el código. Guárdalo como recurso:

<!-- res/values/strings.xml -->
<resources>
    <string name="app_name">Mis tareas</string>
    <string name="boton_guardar">Guardar</string>
    <string name="saludo">Hola, %1$s</string>
    <plurals name="num_tareas">
        <item quantity="one">%d tarea</item>
        <item quantity="other">%d tareas</item>
    </plurals>
</resources>

Y se usa con stringResource:

Text(stringResource(R.string.boton_guardar))
Text(stringResource(R.string.saludo, "Ana"))
Text(pluralStringResource(R.plurals.num_tareas, n, n))

Traducir la app

Crea una carpeta values-en/ (inglés) con su propio strings.xml con los mismos nombres:

<!-- res/values-en/strings.xml -->
<resources>
    <string name="boton_guardar">Save</string>
</resources>

Android elige la carpeta según el idioma del móvil. En Android Studio, clic derecho en strings.xml → Open Translations Editor para traducir en una tabla.

Modo oscuro

Con el tema de la sección anterior ya lo tienes: isSystemInDarkTheme() devuelve true si el móvil usa modo oscuro. Para probar, activa el modo oscuro en el emulador (Ajustes → Pantalla) o en la vista previa:

@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true)
@Composable
fun VistaOscura() { MiAppTheme { Pantalla() } }

Medidas y colores como recurso

<!-- res/values/dimens.xml -->
<dimen name="margen">16dp</dimen>
Modifier.padding(dimensionResource(R.dimen.margen))

Tipografías propias

Copia el archivo .ttf en res/font/ (nombre en minúsculas) y úsalo:

val Rubik = FontFamily(Font(R.font.rubik_regular), Font(R.font.rubik_bold, FontWeight.Bold))
Text("Hola", fontFamily = Rubik)