MediumTopAppBar容器颜色未包裹标题,fillMaxHeight无法调整容器高度
MediumTopAppBar容器颜色未包裹标题的解决方案
问题原因
MediumTopAppBar默认设计为配合滚动行为使用,未配置scrollBehavior时,标题区域背景会继承主题的surface颜色,而非设置的containerColor,导致容器颜色无法覆盖标题区域。
解决方法
方法一:配置滚动行为(推荐,符合Material Design规范)
添加scrollBehavior让TopAppBar处于展开状态,此时containerColor会覆盖整个标题区域:
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( topBar = { MediumTopAppBar( colors = TopAppBarDefaults.mediumTopAppBarColors( containerColor = Color.Yellow ), title = { Text(text = "Expense") }, scrollBehavior = scrollBehavior ) }, content = { innerPadding -> Column(modifier = Modifier.padding(innerPadding)) { // 添加足够内容触发滚动,或保持展开状态 repeat(20) { Text(text = "Expenses item $it") } } } )
方法二:直接覆盖整个TopAppBar背景
如果不需要滚动行为,可将默认容器设为透明,再给TopAppBar添加背景修饰符:
Scaffold( topBar = { MediumTopAppBar( colors = TopAppBarDefaults.mediumTopAppBarColors( containerColor = Color.Transparent ), modifier = Modifier.background(Color.Yellow), title = { Text(text = "Expense") } ) }, content = { innerPadding -> Column(modifier = Modifier.padding(innerPadding)) { Text(text = "Expenses") } } )
方法三:单独给标题设置背景
仅给标题区域添加与容器颜色一致的背景:
Scaffold( topBar = { MediumTopAppBar( colors = TopAppBarDefaults.mediumTopAppBarColors( containerColor = Color.Yellow ), title = { Text( text = "Expense", modifier = Modifier.background(Color.Yellow).fillMaxWidth() ) } ) }, content = { innerPadding -> Column(modifier = Modifier.padding(innerPadding)) { Text(text = "Expenses") } } )
内容的提问来源于stack exchange,提问作者Harsh Vardhan
相关产品推荐
相关产品推荐

