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的机型按照官网描述,如果不做任何处理应该呈现如下情况

  • 手势导航的时候全透明且盛满全屏

  • 三键导航的时候底部半透明且撑满全屏

但是实际上对于部分机型会出现如下情况

  1. 不调用edgeToEdge:在这种情况下手势导航也会是半透明的导航栏

  2. 调用edgeToEdge:在这种情况下是正常的显示样式

如何设置三键式导航栏的半透明状态为透明状态

复制代码
方案一:强制关闭对比度
window.isNavigationBarContrastEnforced = false
方案二:给decorView设置windowInsets监听

1.BottomSheetDialog的状态栏适配

不同的主题对底部弹窗有不同的设定,下方两个主题分别对应的效果为未设置edgeToedge和自动edgeToedge,也就是说本质上它会不会把底部弹窗里的内容延伸到导航栏

右边这个情况是需要下面这样来进行edgeToedge之后的弹窗背景颜色和弹窗圆角的

针对右边的edgeToedge的情况而言需要注意下面这个代码

安卓官方所说,针对三键式导航,是默认半透明状态的导航栏

实测状态下,加上上图这一行代码,效果就和手势导航式一样变成透明导航栏了

如果还是要进行颜色适配,就参考前面activity的那种普通方法

相关推荐
海水冷却5 小时前
Android 群组聊天怎么实现:基于 ZIM 的完整落地指南(附可运行 Demo)
android
三少爷的鞋7 小时前
现代 Android 架构指南:不要再主动设计 Callback 接口
android
TimeFine13 小时前
AI 编码工作流的设计
android·ai编程
骑着蜗牛撵大象32714 小时前
C++20 协程 × 屏障:手写一个 co_await 版 Barrier,让等待不再钉死线程
android·c++20·协程·并发编程·co_await·屏障同步
山东孙燕姿15 小时前
设备台账重构:从一张表到三层模型
android·java·网络·低代码·重构·rxjava
蒸鱼Yuzheng16 小时前
移动端 CPU 调度分析:线程亲和性、大小核迁移与卡顿
android·perfetto·性能分析·线程优化·cpu调度
booboosui17 小时前
安卓唤醒词:12 维 MFCC 加 DTW,阈值 1.8
android
传奇开心果17 小时前
Compose Multiplatform 共享边界实战:架构契约、互操作同步与可回退设计
android·kotlin
事圆则缓17 小时前
从开机到首帧:Android 系统与应用启动流程源码分析
android
AI吃大瓜17 小时前
指针压力表读数4:Android实现指针压力表读数(可实时检测)
android·指针读数·指针压力表·压力表·压力表读数