跳转到内容

NavigationRail ​

NavigationRail 是适用于宽屏设备的侧边导航组件,支持固定收起、固定展开和状态控制三种布局。

引入 ​

kotlin
import top.yukonga.miuix.kmp.basic.NavigationRail
import top.yukonga.miuix.kmp.basic.NavigationRailItem
import top.yukonga.miuix.kmp.basic.rememberNavigationRailState

基本用法 ​

默认使用固定收起布局:

kotlin
var selectedIndex by remember { mutableStateOf(0) }
val items = listOf("主页", "个人", "设置")
val icons = listOf(MiuixIcons.VerticalSplit, MiuixIcons.Contacts, MiuixIcons.Settings)

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

布局模式 ​

使用固定布局重载,通过 expanded 选择布局:

kotlin
NavigationRail(expanded = true) {
    // NavigationRailItem 内容
}

使用状态重载可显示切换按钮,并在两种布局间动画切换:

kotlin
val railState = rememberNavigationRailState()

NavigationRail(state = railState) {
    // NavigationRailItem(...)
}

可以通过 railState.expand()、railState.collapse() 或 railState.toggle() 控制布局。省略 state 和 expanded 时使用固定收起布局。

属性 ​

NavigationRail 提供两个重载,二选一使用:

固定布局 ​

参数类型说明默认值是否必须
expandedBoolean是否使用展开布局false否

可切换布局 ​

参数类型说明默认值是否必须
stateNavigationRailState控制布局并显示切换按钮-是
expandContentDescriptionString收起时切换按钮的描述NavigationRailDefaults.ExpandContentDescription否
collapseContentDescriptionString展开时切换按钮的描述NavigationRailDefaults.CollapseContentDescription否
属性名类型说明默认值是否必须
modifierModifier应用于 NavigationRail 的修饰符Modifier否
header@Composable (ColumnScope.() -> Unit)?头部内容(通常是 FAB 或 Logo)null否
colorColorNavigationRail 的背景颜色MiuixTheme.colorScheme.surface否
showDividerBoolean是否在 NavigationRail 和内容之间显示分割线true否
defaultWindowInsetsPaddingBoolean是否对 NavigationRail 应用默认的窗口边距true否
minWidthDpNavigationRail 收起时的最小宽度NavigationRailDefaults.MinWidth否
expandedWidthDpNavigationRail 展开时的宽度NavigationRailDefaults.ExpandedWidth否
scrollStateScrollState内容列的滚动状态rememberScrollState()否
content@Composable ColumnScope.()NavigationRail 的内容-是
属性名类型说明默认值是否必须
selectedBoolean是否选中-是
onClick() -> Unit点击时的回调-是
iconImageVector该项的图标-是
labelString该项的标签文本-是
modifierModifier应用于 NavigationRailItem 的修饰符Modifier否
enabledBoolean是否启用该项true否
badge(@Composable () -> Unit)?显示在该项图标上的可选徽章,通常是一个 Badgenull否

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

常量 ​

常量名类型说明默认值
MinWidthDp导航栏收起时的最小宽度80.dp
ExpandedWidthDp导航栏展开时的宽度240.dp
VerticalPaddingDp内容垂直内边距24.dp
HeaderSpacingDp头部后的间距24.dp
IconSizeDp图标尺寸28.dp
IconTextSpacingDp图标与文字间距4.dp
ItemVerticalPaddingDp每个项目的垂直内边距12.dp
LabelFontSizeTextUnit标签字号12.sp
ExpandedLabelFontSizeTextUnit展开时的标签字号16.sp
ExpandedItemHorizontalMarginDp展开项与边缘之间的外边距12.dp
ExpandedItemCornerRadiusDp选中药丸的圆角半径16.dp
CollapsedIndicatorVerticalPaddingDp收起项指示器围绕图标的内边距4.dp
ExpandedItemContentHorizontalPaddingDp展开项内部的水平内边距14.dp
ExpandedItemContentVerticalPaddingDp展开项内部的垂直内边距14.dp
ExpandedItemIconTextSpacingDp展开项图标与文字间距16.dp
ExpandContentDescriptionString收起时切换按钮的无障碍描述"Expand navigation rail"
CollapseContentDescriptionString展开时切换按钮的无障碍描述"Collapse navigation rail"

通过 rememberNavigationRailState(initialValue) 创建,并传入 NavigationRail 以让导航栏支持展开/收起。

成员类型说明
currentValueNavigationRailValue当前的展开状态值
isExpandedBoolean导航栏当前是否处于展开状态
expand()fun展开导航栏
collapse()fun收起导航栏
toggle()fun在收起与展开之间切换
值描述
Collapsed导航栏收起到 MinWidth。
Expanded导航栏展开到 ExpandedWidth。

变更日志

基于 Apache-2.0 许可发布