You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码获取Material3底部导航栏的高度?

获取Material3 Bottom NavigationBar高度的最优方案

直接硬编码80.dp确实不是稳妥的做法,这里有两种更可靠的实现方式:

方法一:获取实际渲染高度(最准确)

通过Modifier.onSizeChanged监听BottomNavigation的实际渲染尺寸,这种方式能适配所有自定义主题、屏幕配置或组件修改的场景,拿到的是真实显示高度:

var bottomNavHeight by remember { mutableStateOf(0.dp) }

BottomNavigation(
    modifier = Modifier.onSizeChanged { size ->
        bottomNavHeight = size.height.toDp()
    }
) {
    // 你的导航项示例
    BottomNavigationItem(
        selected = true,
        onClick = {},
        icon = { Icon(Icons.Filled.Home, contentDescription = null) },
        label = { Text("Home") }
    )
    // 其他导航项...
}

// 后续布局中可直接使用bottomNavHeight变量

方法二:从主题令牌获取定义高度

Material3的组件尺寸由主题令牌统一管理,你可以通过当前主题的BottomNavigationTokens获取官方定义的高度,适合不需要等待组件渲染、提前计算布局的场景:

val bottomNavTokens = LocalBottomNavigationTokens.current
val bottomNavHeight = bottomNavTokens.containerHeight.toDp()

这个值是主题预设的高度,如果项目没有自定义BottomNavigation的尺寸,它和实际渲染高度一致;如果有自定义主题调整了尺寸,也能同步拿到修改后的值。

为什么不推荐硬编码?

硬编码80.dp会在以下场景失效:

  • 自定义主题修改了BottomNavigation的容器高度
  • 设备开启大屏幕模式、折叠屏等特殊布局
  • 组件添加额外内边距或修饰符改变了尺寸

内容的提问来源于stack exchange,提问作者X-Black...

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:55:21