Saltearse al contenido

TabRow

MaterialMaterial 3
Imagen del componente TabRow - MaterialImagen del componente FloatingActionButton - Material 3

Los TabRow en Jetpack Compose, un TabRow es un contenedor que mantiene una fila de pestañas. se puede personalizar para cambiar el color de fondo, el color del contenido, el indicador de la pestaña seleccionada y la separación entre las pestañas.

Implementación

Definición del componente

Terminal window
@Composable
fun TabRow(
selectedTabIndex = tabIndex,
modifier = Modifier,
backgroundColor = Color.Blue,
indicator = {},
divider = {},
contentColor= Color.White
){}
AtributoDescripción
selectedTabIndexÍndice de la pestaña seleccionada actualmente.
modifierModificador que implementará el composable.
backgroundColorColor de fondo del TabRow.
indicatorFunción lambda que define el indicador que resalta la pestaña seleccionada.
contentColorColor del contenido.

Ejemplos

Imagen del componente FloatingActionButton - Material
Terminal window
@Composable
fun MyTabScreen() {
var tabIndex by remember { mutableIntStateOf(0) }
val tabs = listOf("Home", "Products", "Settings")
Column(modifier = Modifier.fillMaxWidth()) {
TabRow(
selectedTabIndex = tabIndex,
modifier = Modifier,
backgroundColor = Color.Blue,
contentColor = Color.White,
indicator = { tabPositions ->
TabRowDefaults.apply {
Divider(Modifier
.height(2.dp)
.padding(horizontal = 16.dp)
.tabIndicatorOffset(tabPositions[tabIndex]),
color = MaterialTheme.colors.primary
)
}
},
divider ={}
) {
tabs.forEachIndexed { index, title ->
Tab(text = { Text(title) },
selected = tabIndex == index,
onClick = { tabIndex = index },
icon = {
when (index) {
0 -> Icon(imageVector = Icons.Default.Home, contentDescription = null)
1 -> Icon(imageVector = Icons.Default.List, contentDescription = null)
2 -> Icon(imageVector = Icons.Default.Settings, contentDescription = null)
}
}
)
}
}
when (tabIndex) {
0 -> HomeScreen()
1 -> ProductsScreen()
2 -> SettingsScreen()
}
}
}
@Composable
fun HomeScreen() {
Column(
Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Home", fontSize = 25.sp)
}
}
@Composable
fun ProductsScreen() {
Column(
Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Products", fontSize = 25.sp)
}
}
@Composable
fun SettingsScreen() {
Column(
Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Settings", fontSize = 25.sp)
}
}