Sekmeler, ilgili içerik gruplarını düzenlemenize olanak tanır. İki tür sekme vardır:
- Birincil sekmeler: İçerik bölmesinin üst kısmına, üst uygulama çubuğunun altına yerleştirilir. Ana içerik hedeflerini gösterirler ve yalnızca bir sekme grubu gerektiğinde kullanılmalıdırlar.
- İkincil sekmeler: İlgili içeriği daha fazla ayırmak ve hiyerarşi oluşturmak için bir içerik alanında kullanılır. Bir ekranda birden fazla sekme düzeyi gerektiğinde kullanılırlar.
Bu sayfada, uygulamanızda ilgili ekranlar ve temel gezinme ile birincil sekmelerin nasıl gösterileceği açıklanmaktadır.
API yüzeyi
Sekmeleri uygulamak için Tab, PrimaryTabRow ve SecondaryTabRow composable'larını kullanın. Tab composable, satırdaki tek bir sekmeyi temsil eder ve genellikle PrimaryTabRow (birincil gösterge sekmeleri için) veya SecondaryTabRow (ikincil gösterge sekmeleri için) içinde kullanılır.
Tab aşağıdaki temel parametreleri içerir:
selected: Mevcut sekmenin görsel olarak vurgulanıp vurgulanmayacağını belirler.onClick(): Kullanıcı sekmeyi tıkladığında gerçekleştirilecek işlemi tanımlayan zorunlu bir lambda işlevi. Genellikle gezinme etkinliklerini işlediğiniz, seçili sekme durumunu güncellediğiniz veya ilgili içeriği yüklediğiniz yer burasıdır.text: Sekmede metin gösterir. İsteğe bağlı.icon: Sekmede bir simge gösterir. İsteğe bağlı.enabled: Sekmenin etkinleştirilip etkinleştirilmediğini ve sekme ile etkileşim kurulup kurulamayacağını kontrol eder. Yanlış değerine ayarlanırsa sekme devre dışı durumda görünür ve tıklamalara yanıt vermez.
Örnek: Sekmeye dayalı gezinme
Aşağıdaki snippet, bir uygulamadaki farklı ekranlar arasında gezinmek için sekmeler içeren bir üst gezinme çubuğu uygular:
@Composable fun NavigationTabExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) { Destination.entries.forEachIndexed { index, destination -> Tab( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, text = { Text( text = destination.label, maxLines = 2, overflow = TextOverflow.Ellipsis ) } ) } } AppNavHost(navController, startDestination) } }
Önemli noktalar
PrimaryTabRow, her sekmenin birDestinationöğesine karşılık geldiği yatay bir sekme satırı gösterir.val navController = rememberNavController(),NavHostiçinde gezinmeyi yöneten birNavHostControllerörneği oluşturur ve hatırlar.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }, seçili sekmenin durumunu yönetir.startDestination.ordinal,Destination.SONGSenum girişinin sayısal dizinini (konumunu) alır.
- Bir sekmeyi tıkladığınızda
onClicklambda, ilgili ekrana gitmek içinnavController.navigate(route = destination.route)işlevini çağırır. TaböğesininonClicklambda'sı, tıklanan sekmeyi görsel olarak vurgulamak içinselectedDestinationdurumunu günceller.- Seçilen ekranın gerçek içeriğini görüntülemek için
navControllervestartDestinationdeğerlerini ileterekAppNavHostcomposable'ını çağırır.
Sonuç
Aşağıdaki resimde, önceki snippet'in sonucu gösterilmektedir:
.png?hl=tr)