分頁可用來整理相關內容群組。分頁分為兩種類型:
- 主要分頁:位於內容窗格頂端,在頂端應用程式列下方。這類分頁會顯示主要內容目的地,適合在只需要一組分頁時使用。
- 次要分頁:在內容區域內使用,可進一步分隔相關內容並建立階層。如果畫面需要多個層級的分頁,就必須使用這類分頁。
本頁面說明如何在應用程式中顯示主要分頁,以及相關畫面和基本導覽。
API 介面
使用 Tab、PrimaryTabRow 和 SecondaryTabRow 可組合項實作分頁。Tab 可組合項代表資料列中的個別分頁,通常用於 PrimaryTabRow (主要指標分頁) 或 SecondaryTabRow (次要指標分頁) 內。
Tab 包含下列重要參數:
selected:決定是否要醒目顯示目前的分頁。onClick():必要的 lambda 函式,定義使用者點選分頁標籤時要執行的動作。您通常會在這裡處理導覽事件、更新所選分頁狀態,或載入對應內容。text:在分頁中顯示文字。選填。icon:在分頁中顯示圖示。選填。enabled:控制是否啟用分頁,以及是否可與分頁互動。如果設為 false,分頁會顯示為停用狀態,且不會回應點擊。
範例:分頁式導覽
以下程式碼片段會實作頂端導覽列,並提供分頁,方便使用者在應用程式的不同畫面之間切換:
@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) } }
重點
PrimaryTabRow會顯示一列水平分頁,每個分頁對應一個Destination。val navController = rememberNavController()會建立並記住NavHostController的例項,用於管理NavHost內的導覽。var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }會管理所選分頁的狀態。startDestination.ordinal會取得Destination.SONGS列舉項目的數值索引 (位置)。
- 點選分頁標籤時,
onClicklambda 會呼叫navController.navigate(route = destination.route),前往對應的畫面。 Tab的onClicklambda 會更新selectedDestination狀態,以視覺方式醒目顯示點選的分頁。- 它會呼叫
AppNavHost可組合函式,傳遞navController和startDestination,以顯示所選畫面的實際內容。
結果
下圖顯示上述程式碼片段的結果:
.png?hl=zh-tw)