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

Android 15中打开BottomSheet时导航栏出现黑色条带问题

Android 15 BottomSheet底部出现额外条带问题

升级到Android 15后,应用内多个BottomSheet打开时底部会显示一条不属于BottomSheet的额外条带(截图:Screen with bottom sheet)。该问题仅在Android 15设备上出现,Android 14及以下版本表现正常。

当前应用使用的主题代码如下:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@android:color/white</item>
    <item name="colorAccent">@android:color/black</item>
    <item name="android:statusBarColor">@color/white_2</item>
    <item name="android:windowLightStatusBar" tools:ignore="NewApi">true</item>
    <item name="android:defaultFocusHighlightEnabled" tools:targetApi="o">false</item>
    <item name="android:windowActivityTransitions">true</item>
    <item name="bottomSheetDialogTheme">@style/BottomSheetDialogTheme2</item>
</style>

<style name="BottomSheetDialogTheme2" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="bottomSheetStyle">@style/AppModalStyle2</item>
    <item name="colorPrimary">@android:color/white</item>
    <item name="colorAccent">@android:color/black</item>
</style>

<style name="AppModalStyle2" parent="Widget.Design.BottomSheet.Modal">
    <item name="android:background">@drawable/top_corners</item>
</style>

已尝试Android 15官方行为变更文档中的方法,也试过setNavigationBarColor(该方法已废弃),均未解决问题。


解决方案

1. 适配Android 15窗口Insets规则

Android 15对非边缘到边缘窗口的导航栏处理逻辑有调整,需在BottomSheet主题中明确配置Insets相关属性:
在BottomSheetDialogTheme2中添加以下配置:

<item name="android:windowDecorFitsSystemWindows">false</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<!-- 针对Android 15+配置Insets控制器 -->
<item name="android:windowInsetsController">@style/BottomSheetInsetsController</item>

同时添加Insets控制器样式:

<style name="BottomSheetInsetsController" parent="">
    <item name="android:hideNavigationBar">true</item>
    <item name="android:navigationBarContrastEnforced">false</item>
</style>

2. 升级Material Components主题依赖

当前使用的Theme.Design.Light.BottomSheetDialog属于旧版Design库,建议切换到Material Components的官方主题,确保适配Android 15新特性:
修改BottomSheetDialogTheme2的父主题:

<style name="BottomSheetDialogTheme2" parent="Theme.MaterialComponents.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="bottomSheetStyle">@style/AppModalStyle2</item>
    <item name="colorPrimary">@android:color/white</item>
    <item name="colorAccent">@android:color/black</item>
    <!-- 加入Insets适配配置 -->
    <item name="android:windowDecorFitsSystemWindows">false</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
</style>

3. 代码层手动处理Insets

若主题配置无效,可在BottomSheetDialog的onCreate方法中直接控制Insets:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
        window?.insetsController?.apply {
            hide(WindowInsets.Type.navigationBars())
            systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        }
    }
    window?.setNavigationBarColor(Color.TRANSPARENT)
}

4. 检查BottomSheet布局高度

确保BottomSheet的根布局高度设置为match_parent,并添加fitsSystemWindows属性:

android:layout_height="match_parent"
android:fitsSystemWindows="true"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:21:17