跳转到内容

NavigationRail

NavigationRail 是 COUI 中的侧边导航组件,适用于宽屏设备。提供不同的显示模式(仅图标、仅文本、图标和文本、仅选中项显示文本)。

引入

kotlin
import io.github.suqi8.coui.kmp.basic.NavigationRail
import io.github.suqi8.coui.kmp.basic.NavigationRailItem
import io.github.suqi8.coui.kmp.basic.NavigationRailDisplayMode

基本用法

NavigationRail 组件可用于创建侧边导航菜单:

kotlin
var selectedIndex by remember { mutableStateOf(0) }
val items = listOf("Home", "Profile", "Settings")
val icons = listOf(COUIIcons.VerticalSplit, COUIIcons.Contacts, COUIIcons.Settings)

Row {
    NavigationRail {
        items.forEachIndexed { index, label ->
            NavigationRailItem(
                selected = selectedIndex == index,
                onClick = { selectedIndex = index },
                icon = icons[index],
                label = label
            )
        }
    }
    // Content area
}

组件状态

选中状态

NavigationRailItem 都会自动处理选中项的视觉样式,选中项将显示粗体文本并高亮图标/文本。

属性

属性名类型说明默认值是否必须
modifierModifier应用于 NavigationRail 的修饰符Modifier
header@Composable (ColumnScope.() -> Unit)?头部内容(通常是 FAB 或 Logo)null
colorColorNavigationRail 的背景颜色COUITheme.colorScheme.surface
showDividerBoolean是否在 NavigationRail 和内容之间显示分割线true
defaultWindowInsetsPaddingBoolean是否对 NavigationRail 应用默认的窗口边距true
minWidthDpNavigationRail 的最小宽度NavigationRailDefaults.MinWidth
modeNavigationRailDisplayMode项目的显示模式NavigationRailDisplayMode.IconAndText
content@Composable ColumnScope.()NavigationRail 的内容-
属性名类型说明默认值是否必须
selectedBoolean是否选中-
onClick() -> Unit点击时的回调-
iconImageVector该项的图标-
labelString该项的标签文本-
modifierModifier应用于 NavigationRailItem 的修饰符Modifier
enabledBoolean是否启用该项true

NavigationRailDefaults 对象提供了 NavigationRail 和 NavigationRailItem 组件的默认值。

常量

常量名类型说明默认值
MinWidthDp导航栏最小宽度72.dp
VerticalPaddingDp内容垂直内边距24.dp
HeaderSpacingDp头部后的间距24.dp
IconSizeDp图标尺寸24.dp
IconTextSpacingDp图标与文字间距2.dp
ItemVerticalPaddingDp每个项目的垂直内边距12.dp
LabelFontSizeTextUnit标签字号10.sp
TextOnlyFontSizeTextUnitTextOnly 模式字号14.sp
TextOnlyVerticalPaddingDpTextOnly 模式垂直内边距4.dp
SelectedPressedAlphaFloat选中项按压时的透明度0.5f
UnselectedPressedAlphaFloat未选中项按压时的透明度0.6f
UnselectedAlphaFloat未选中项的透明度0.4f
描述
IconAndText同时显示图标和文本。
IconOnly仅显示图标。
TextOnly仅显示文本。
IconWithSelectedLabel始终显示图标,仅在选中时显示文本。

设置在 NavigationRail 上的显示模式会通过 LocalNavigationRailDisplayMode 组合局部值传递给各导航项。

进阶用法

显示模式

kotlin
NavigationRail(
    // IconAndText (default) / IconOnly / TextOnly / IconWithSelectedLabel
    mode = NavigationRailDisplayMode.IconWithSelectedLabel
) {
    // ... items ...
}

使用头部内容

kotlin
NavigationRail(
    header = {
        // Usually a FloatingActionButton or a logo
        FloatingActionButton(
            onClick = { /* Handle click */ }
        ) {
            Icon(
                imageVector = COUIIcons.Add,
                contentDescription = "Add"
            )
        }
    }
) {
    // ... items ...
}

自定义颜色和宽度

kotlin
NavigationRail(
    color = COUITheme.colorScheme.background,
    minWidth = 96.dp
) {
    // ... items ...
}

无分割线

kotlin
NavigationRail(
    showDivider = false
) {
    // ... items ...
}

变更日志

基于 Apache-2.0 许可发布