如何通过代码获取Material3底部导航栏的高度?
直接硬编码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...
相关产品推荐
相关产品推荐

