0Pricing
Jetpack Compose Academy · Lección

Estados habilitado, deshabilitado y de carga

Refleje la disponibilidad en sus botones.

Estados habilitado, deshabilitado y de carga es una lección gratuita de Jetpack Compose Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Jetpack Compose Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Jetpack Compose Academy incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Buttons Have Moods

A good button reflects reality: ready, blocked, or working. Compose lets you express these states so users always know what is possible. 🚦

The enabled Parameter

Every button takes an enabled flag. Set it to false and the button greys out and ignores taps automatically.

Button(
    onClick = { submit() },
    enabled = false
) { Text("Submit") }

Drive enabled From State

The real power is binding enabled to state. Tie it to validation so the button only activates when input is ready.

Button(
    onClick = { submit() },
    enabled = name.isNotBlank()
) { Text("Submit") }

Disabled Means Blocked

A disabled button still appears, so users see the action exists. Its faded look signals why not yet without an error message.

Show Progress While Working

For slow actions, show a loading state. Track a boolean and swap the label for a spinner while the work runs.

var loading by remember { mutableStateOf(false) }

Disable During Loading

While loading, set enabled = !loading so users cannot double-tap and fire the same action twice.

Button(
    onClick = { loading = true },
    enabled = !loading
) { Text("Save") }

Swap In a Spinner

Inside the content, branch on the flag: show a small CircularProgressIndicator when loading, the label otherwise.

Button(onClick = { }, enabled = !loading) {
    if (loading) CircularProgressIndicator(Modifier.size(18.dp))
    else Text("Save")
}

Size the Spinner Down

The default spinner is large. Constrain it with a Modifier.size so it fits neatly where the label used to sit.

CircularProgressIndicator(
    modifier = Modifier.size(18.dp),
    strokeWidth = 2.dp
)

Reset When Done

When the work finishes, set loading back to false. The label returns and the button becomes tappable again.

onResult = { loading = false }

States Prevent Mistakes

Together, enabled and loading guard your actions: no taps before input is valid, no duplicate taps while work is in flight.

Communicate, Don't Hide

Prefer disabling over hiding a button. A visible-but-disabled control teaches users the path to unlock it.

Quick Check

Your save action takes two seconds and users keep double-tapping it.

Recap: Stateful Buttons

You learned to reflect reality: enabled gates by validity, a loading flag shows progress and blocks repeats. Honest buttons, happy users. 🎯

Preguntas frecuentes

¿La lección «Estados habilitado, deshabilitado y de carga» es gratis?

Sí — el texto completo de «Estados habilitado, deshabilitado y de carga» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Jetpack Compose Academy, actualiza a CoddyKit PRO. El curso de Jetpack Compose Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Estados habilitado, deshabilitado y de carga»?

Refleje la disponibilidad en sus botones. Practicas Jetpack Compose Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Jetpack Compose Academy?

No se requiere experiencia previa. Jetpack Compose Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Estados habilitado, deshabilitado y de carga»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Jetpack Compose Academy?

Sí. Cada lección de Jetpack Compose Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Button y onClick
  2. Botones Text, Outlined e Icon
  3. Estados habilitado, deshabilitado y de carga
  4. clickable en cualquier Composable
← Volver a Jetpack Compose Academy