分頁可讓您將相關內容分組。分頁分為兩種類型:
- 主要分頁:位於頂端應用程式列下方內容窗格的頂端。這類分頁會顯示主要內容目的地,且應只在需要一組分頁時使用。
- 次要分頁:用於內容區域,進一步區分相關內容並建立階層。如果畫面需要多個分頁層級,就必須使用這些屬性。

本頁面說明如何在應用程式中顯示主要分頁,並提供相關畫面和基本導覽功能。
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
列舉項目的數字索引 (位置)。
- 點選分頁時,系統會呼叫
navController.navigate(route = destination.route)
,以便前往對應的畫面。 Tab
的onClick
lambda 會更新selectedDestination
狀態,以便視覺醒目顯示已按一下的分頁。- 它會呼叫
AppNavHost
可組合函式,傳遞navController
和startDestination
,以便顯示所選畫面的實際內容。
結果
下圖顯示上一個程式碼片段的結果:
.png?hl=zh-tw)