Android:如何让Dialog的遮罩层(Dim)显示在Toolbar下方?
解决Dialog遮罩层避开Toolbar的方法
方法1:自定义遮罩替代系统默认遮罩
- 关闭Dialog自带遮罩:调用
dialog.window?.setDimAmount(0f),取消系统默认的半透明遮罩 - 在内容区域的父布局中添加一个半透明的View作为自定义遮罩,让它的布局范围完全匹配内容区域(即从Toolbar底部延伸到底部导航顶部)
- 显示Dialog时显示该遮罩,关闭Dialog时隐藏,这样遮罩只会覆盖内容区域,不会影响Toolbar
方法2:调整Dialog窗口的显示偏移
- 获取Dialog的Window对象,设置窗口顶部偏移量为Toolbar的实际高度:
val toolbarHeight = toolbar.height dialog.window?.let { window -> val params = window.attributes // 让Dialog窗口从Toolbar下方开始显示,同时带动遮罩偏移 params.y = toolbarHeight window.attributes = params } - 注意要在Toolbar完成测量后获取高度(比如在
onWindowFocusChanged或者View.post回调中执行),避免拿到0值
方法3:改用BottomSheetDialog
- 如果你的Dialog是底部弹出类型,直接使用
BottomSheetDialog替代普通Dialog,它的遮罩默认会避开顶部Toolbar(前提是Toolbar属于Activity主布局,而非Dialog内部布局) - 只需替换Dialog实例,再按需调整内部布局位置即可
内容的提问来源于stack exchange,提问作者wiryadev
相关产品推荐
相关产品推荐

