Android15 状态栏适配
1.edgeToEdge的变动
android15 默认已经开启了透明状态栏和边到边的效果 官方文档的相关介绍:https://developer.android.com/develop/ui/views/layout/edge-to-edge#enable-edge-to-edge-display
1.1.edgeToEdge对状态栏的影响
-
手势导航栏全部透明
-
三键式导航栏百分之八十不透明
-
三键式导航弃用但仍旧可以设置底部栏颜色
setStatusBarContrastEnforced() 是 Android 系统中一个与控制状态栏对比度相关的 API。它主要用于确保状态栏图标(如时间、电池图标)在任何背景下都有足够的可见性。
api | 手势导航 | 三键式导航 |
---|---|---|
setNavigationBarColor | 无效 | 废弃(有效) |
setNavigationBarContrastEnforced | 无效 | 默认百分之八十不透明 |
setStatusBarColor | 无效 | 无效 |
setStatusBarContrastEnforced | 无效 | 无效 |
1.2.edgeToEdge效果
android15的机型按照官网描述,如果不做任何处理应该呈现如下情况
-
手势导航的时候全透明且盛满全屏
-
三键导航的时候底部半透明且撑满全屏
但是实际上对于部分机型会出现如下情况
-
不调用edgeToEdge:在这种情况下手势导航也会是半透明的导航栏
-
调用edgeToEdge:在这种情况下是正常的显示样式
如何设置三键式导航栏的半透明状态为透明状态
方案一:强制关闭对比度 window.isNavigationBarContrastEnforced = false 方案二:给decorView设置windowInsets监听
1.BottomSheetDialog的状态栏适配
不同的主题对底部弹窗有不同的设定,下方两个主题分别对应的效果为未设置edgeToedge和自动edgeToedge,也就是说本质上它会不会把底部弹窗里的内容延伸到导航栏
右边这个情况是需要下面这样来进行edgeToedge之后的弹窗背景颜色和弹窗圆角的
针对右边的edgeToedge的情况而言需要注意下面这个代码
安卓官方所说,针对三键式导航,是默认半透明状态的导航栏
实测状态下,加上上图这一行代码,效果就和手势导航式一样变成透明导航栏了
如果还是要进行颜色适配,就参考前面activity的那种普通方法