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

Android Dialog与BottomSheet渐变背景透明度失效被替换为白色问题

问题根因

默认Material组件的BottomSheet、Dialog自带不透明的白色默认背景,你设置的半透明渐变背景会透到底部的默认白色上,导致看起来渐变透明失效、颜色变白。如果是内嵌在Activity中的BottomSheet,还要确认BottomSheet背后的父布局/页面内容不是纯色白色,否则透明区域自然会透出白色。
你提供的渐变drawable配置本身没有错误,无需调整。

解决方案
  • 移除组件默认白色背景
    如果是内嵌在布局中的BottomSheet,在初始化代码中添加如下代码:
// 移除BottomSheet自身默认背景
findViewById<LinearLayout>(R.id.bottomSheet).setBackgroundColor(Color.TRANSPARENT)

如果是Dialog形式的BottomSheet,还要额外给Dialog的Window设置透明背景:

dialog.window?.apply {
    setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    // 若不需要默认的半透明遮罩可添加下面一行
    // clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}

如果全局主题配置了BottomSheet样式,还需要在主题中添加透明背景配置:

<!-- 主主题中添加 -->
<item name="bottomSheetStyle">@style/TransparentBottomSheet</item>

<!-- 自定义style -->
<style name="TransparentBottomSheet" parent="Widget.MaterialComponents.BottomSheet.Modal">
    <item name="backgroundTint">@android:color/transparent</item>
</style>
  • 补充模糊效果配置
    你当前的渐变只能实现透明过渡,要实现期望的模糊效果可以按系统版本选择方案:
  1. Android 12及以上可直接调用系统API实现:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    bottomSheet.setRenderEffect(
        RenderEffect.createBlurEffect(25f, 25f, Shader.TileMode.CLAMP)
    )
}
  1. 低版本兼容可以引入第三方模糊实现库处理。
  • 验证透传逻辑
    完成上述配置后如果透明区域仍显示白色,检查BottomSheet所在的父布局、所属Activity的window背景是否为白色,按需调整为你需要透出的底层内容即可。

内容的提问来源于stack exchange,提问作者hob382

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:51:03