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

Android 14下BottomSheetDialog无背景遮罩(Dim)问题求助

Android 14下BottomSheetDialog无背景遮罩(Dim)问题求助

你好,我刚好也碰到过Android 14上BottomSheetDialog遮罩消失的问题,这是因为Android 14对Dialog的窗口属性逻辑做了调整,只设置android:backgroundDimEnabled="true"确实不会生效,试试下面这几个解决方案:

方案一:通过主题显式配置遮罩参数

在你的DialogStyle主题里,除了backgroundDimEnabled,还需要加上backgroundDimAmount属性,指定遮罩的透明度:

<style name="DialogStyle" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="bottomSheetStyle">@style/RoundedBottomSheet</item>
    <!-- 添加这两个属性 -->
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:backgroundDimAmount">0.5</item> <!-- 取值0-1,0完全透明,1完全不透明,可按需调整 -->
</style>

方案二:代码中动态设置遮罩

如果主题配置还是不生效,可以在创建BottomSheetDialog之后,通过Window对象强制开启遮罩并设置透明度:

Kotlin代码:

val dialog = BottomSheetDialog(requireContext(), R.style.DialogStyle)
dialog.window?.apply {
    setDimAmount(0.5f)
    addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
// 后续显示dialog的逻辑
dialog.show()

Java代码:

BottomSheetDialog dialog = new BottomSheetDialog(getContext(), R.style.DialogStyle);
Window window = dialog.getWindow();
if (window != null) {
    window.setDimAmount(0.5f);
    window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
dialog.show();

方案三:排查样式冲突

可以暂时注释掉RoundedBottomSheet里的动画属性,测试下是不是动画导致遮罩被意外隐藏:

<style name="RoundedBottomSheet" parent="Widget.Design.BottomSheet.Modal">
    <item name="android:background">@android:color/transparent</item>
    <!-- 暂时注释动画测试 -->
    <!-- <item name="android:windowEnterAnimation">@anim/popup_window_enter_animation</item> -->
    <!-- <item name="android:windowExitAnimation">@anim/popup_window_exit_animation</item> -->
</style>

原因说明

Android 14对BottomSheetDialog的窗口初始化逻辑做了优化,默认情况下可能不再自动启用背景遮罩,必须显式指定FLAG_DIM_BEHIND和遮罩透明度才能让遮罩正常显示,这就是之前只加backgroundDimEnabled没用的原因。

备注:内容来源于stack exchange,提问作者DanielOk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:38:01