El diseño de pestañas se usa en la mayoría de las aplicaciones, como WhatsApp, en la que los usuarios pueden navegar fácilmente a varias pantallas simplemente deslizando hacia la izquierda o hacia la derecha. Este diseño de pestaña proporciona una fácil navegación entre varias pantallas. En este artículo, veremos cómo podemos implementar Tab Layout dentro de nuestra aplicación de Android usando Jetpack Compose . A continuación se muestra un video de muestra para tener una idea de lo que vamos a hacer en este artículo.
Implementación paso a paso
Paso 1: crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Al elegir la plantilla, seleccione Actividad de composición vacía . Si no encuentra esta plantilla, intente actualizar Android Studio a la última versión. Demostramos la aplicación en Kotlin , así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.
Paso 2: Agregar dependencia en build.gradle para usar Tab Layout
Navegue a Gradle Scripts > archivo build.gradle y agregue debajo de dos dependencias en la sección de dependencias.
// Paging Compose implementation "com.google.accompanist:accompanist-pager:0.13.0" implementation "com.google.accompanist:accompanist-pager-indicators:0.13.0"
Después de agregar esta dependencia, simplemente sincronice el proyecto para instalarlo.
Paso 3: Agregar y actualizar colores en el archivo Color.kt
Vaya a aplicación > java > nombre del paquete de su aplicación > carpeta ui.theme > archivo Color.kt y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle.
Kotlin
package com.example.newcanaryproject.ui.theme import androidx.compose.ui.graphics.Color val Purple200 = Color(0xFF0F9D58) val Purple500 = Color(0xFF0F9D58) val Purple700 = Color(0xFF3700B3) val Teal200 = Color(0xFF03DAC5) // on below line we are adding green color val greenColor = Color(0xFF0F9D58)
Paso 4: Agregar diseño de pestaña en el archivo MainActivity.kt
Vaya a la aplicación > java > el nombre del paquete de su aplicación y abra el archivo MainActivity.kt . Dentro de ese archivo, agregue el siguiente código. Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
package com.example.newcanaryproject import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.filled.ShoppingCart import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.* import com.example.newcanaryproject.ui.theme.NewCanaryProjectTheme import com.example.newcanaryproject.ui.theme.greenColor import com.google.accompanist.pager.* import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { @OptIn(ExperimentalPagerApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { NewCanaryProjectTheme { // on below line we are calling tab // layout method for displaying tab layout TabLayout() } } } } // on below line we are creating a // composable function for our tab layout @OptIn(ExperimentalUnitApi::class) @ExperimentalPagerApi @Composable fun TabLayout() { // on below line we are creating variable for pager state. val pagerState = rememberPagerState(pageCount = 3) // on below line we are creating a column for our widgets. Column( // for column we are specifying modifier on below line. modifier = Modifier.background(Color.White) ) { // on the below line we are specifying the top app bar // and specifying background color for it. TopAppBar(backgroundColor = greenColor) { // on below line we are specifying a column // for our text view to display a text // in our top app bar. Column( modifier = Modifier.fillMaxSize(), // on below line we are providing alignment for our // column to center of our top app bar. horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { // on below line we are specifying a text and // specifying a text as "Tab Layout Example" Text( text = "Tab Layout Example", style = TextStyle(color = Color.White), fontWeight = FontWeight.Bold, fontSize = TextUnit( 18F, TextUnitType.Sp ), // on below line we are specifying a modifier // to our text and adding passing from all sides. modifier = Modifier.padding(all = Dp(5F)), // on below line we are aligning // our text to center. textAlign = TextAlign.Center ) } } // on below line we are calling tabs Tabs(pagerState = pagerState) // on below line we are calling tabs content // for displaying our page for each tab layout TabsContent(pagerState = pagerState) } } // on below line we are // creating a function for tabs @ExperimentalPagerApi @Composable fun Tabs(pagerState: PagerState) { // in this function we are creating a list // in this list we are specifying data as // name of the tab and the icon for it. val list = listOf( "Home" to Icons.Default.Home, "Shopping" to Icons.Default.ShoppingCart, "Settings" to Icons.Default.Settings ) // on below line we are creating // a variable for the scope. val scope = rememberCoroutineScope() // on below line we are creating a // individual row for our tab layout. TabRow( // on below line we are specifying // the selected index. selectedTabIndex = pagerState.currentPage, // on below line we are // specifying background color. backgroundColor = greenColor, // on below line we are specifying content color. contentColor = Color.White, // on below line we are specifying // the indicator for the tab indicator = { tabPositions -> // on below line we are specifying the styling // for tab indicator by specifying height // and color for the tab indicator. TabRowDefaults.Indicator( Modifier.pagerTabIndicatorOffset(pagerState, tabPositions), height = 2.dp, color = Color.White ) } ) { // on below line we are specifying icon // and text for the individual tab item list.forEachIndexed { index, _ -> // on below line we are creating a tab. Tab( // on below line we are specifying icon // for each tab item and we are calling // image from the list which we have created. icon = { Icon(imageVector = list[index].second, contentDescription = null) }, // on below line we are specifying the text for // the each tab item and we are calling data // from the list which we have created. text = { Text( list[index].first, // on below line we are specifying the text color // for the text in that tab color = if (pagerState.currentPage == index) Color.White else Color.LightGray ) }, // on below line we are specifying // the tab which is selected. selected = pagerState.currentPage == index, // on below line we are specifying the // on click for the tab which is selected. onClick = { // on below line we are specifying the scope. scope.launch { pagerState.animateScrollToPage(index) } } ) } } } // on below line we are creating a tab content method // in which we will be displaying the individual page of our tab . @ExperimentalPagerApi @Composable fun TabsContent(pagerState: PagerState) { // on below line we are creating // horizontal pager for our tab layout. HorizontalPager(state = pagerState) { // on below line we are specifying // the different pages. page -> when (page) { // on below line we are calling tab content screen // and specifying data as Home Screen. 0 -> TabContentScreen(data = "Welcome to Home Screen") // on below line we are calling tab content screen // and specifying data as Shopping Screen. 1 -> TabContentScreen(data = "Welcome to Shopping Screen") // on below line we are calling tab content screen // and specifying data as Settings Screen. 2 -> TabContentScreen(data = "Welcome to Settings Screen") } } } // on below line we are creating a Tab Content // Screen for displaying a simple text message. @Composable fun TabContentScreen(data: String) { // on below line we are creating a column Column( // in this column we are specifying modifier // and aligning it center of the screen on below lines. modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { // in this column we are specifying the text Text( // on below line we are specifying the text message text = data, // on below line we are specifying the text style. style = MaterialTheme.typography.h5, // on below line we are specifying the text color color = greenColor, // on below line we are specifying the font weight fontWeight = FontWeight.Bold, //on below line we are specifying the text alignment. textAlign = TextAlign.Center ) } }
Ahora ejecute su aplicación para ver el resultado.
Producción:
Publicación traducida automáticamente
Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA