======JetPack Compose====== **Jetpack Compose** es el sistema oficial de Google para el diseño de interfaces. Con Compose las interfaces se construyen mediante funciones en lenguaje Kotlin. ===== Funciones Composable ===== Las funciones que forman parte de la interfaz se marcan con la anotación: @Composable Por ejemplo: @Composable fun Saludo() { Text("Hola Android") } Una función ''@Composable'' puede llamar a otras funciones ''@Composable'' para construir interfaces más complejas. Por ejemplo: @Composable fun PantallaPrincipal() { Column { Text("Bienvenido") Text("Mi primera aplicación") } } ==== Mostrar la interfaz ==== Desde la Activity podemos indicar qué interfaz queremos mostrar utilizando: setContent { PantallaPrincipal() } Un ejemplo completo sería: class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { PantallaPrincipal() } } } ==== Componentes básicos ==== Compose incluye numerosos componentes para construir interfaces. Algunos de los más utilizados al principio son: ^ Componente ^ Función ^ | ''Text'' | Mostrar texto | | ''Button'' | Crear botones | | ''TextField'' | Introducir texto | | ''Image'' | Mostrar imágenes | | ''Icon'' | Mostrar iconos | Por ejemplo: @Composable fun Ejemplo() { Text("Nombre") Button( onClick = { // Acción al pulsar } ) { Text("Aceptar") } } ==== Organización de elementos ==== Compose permite organizar los componentes mediante distintos contenedores. Los principales son: ^ Componente ^ Función ^ | ''Column'' | Coloca los elementos verticalmente | | ''Row'' | Coloca los elementos horizontalmente | | ''Box'' | Permite superponer o posicionar elementos | Ejemplo: @Composable fun DatosUsuario() { Column { Text("Nombre: Ana") Text("Edad: 22") } } También podemos combinar diferentes contenedores: @Composable fun FichaUsuario() { Column { Text("Usuario") Row { Text("Ana") Text("22 años") } } } ==== Modifier ==== ''Modifier'' se utiliza para modificar el aspecto, tamaño o posición de los componentes. Por ejemplo: Text( text = "Hola Android", modifier = Modifier.padding(16.dp) ) También podemos encadenar varios modificadores: Button( onClick = { }, modifier = Modifier .fillMaxWidth() .padding(16.dp) ) { Text("Aceptar") } Algunos modificadores habituales son: * ''padding()'' * ''fillMaxWidth()'' * ''fillMaxSize()'' * ''width()'' * ''height()'' ==== Material Design ==== Jetpack Compose utiliza habitualmente componentes basados en Material Design. Por ejemplo: Button( onClick = { } ) { Text("Guardar") } o: TextField( value = "", onValueChange = { }, label = { Text("Nombre") } ) Estos componentes ya incluyen comportamientos y estilos preparados para aplicaciones Android modernas. ==== Previsualizar componentes ==== Android Studio permite previsualizar componentes Compose sin ejecutar completamente la aplicación. Para ello se utiliza la anotación: @Preview Por ejemplo: @Preview(showBackground = true) @Composable fun PantallaPreview() { PantallaPrincipal() } Esto permite comprobar rápidamente cómo se verá una parte de la interfaz. ==== Componentes reutilizables ==== Una de las ventajas de Compose es que podemos dividir una interfaz en funciones pequeñas y reutilizables. Por ejemplo: @Composable fun Titulo(texto: String) { Text(texto) } Podemos reutilizarla varias veces: @Composable fun Pantalla() { Column { Titulo("Usuarios") Titulo("Configuración") } } Esto facilita mantener el código organizado y evita repetir elementos. ===== Estado y eventos ===== El estado es el conjunto de datos que determina cómo debe mostrarse la interfaz en un momento determinado.