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的那种普通方法

相关推荐
传奇开心果编程18 分钟前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓2 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer
supabc1233 小时前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium
Dovis(誓平步青云)3 小时前
导览音频切换太快,旧讲解不能覆盖新展品
android·前端·javascript·ecmascript·音视频·宠物
五彩小白20 小时前
自回归和上下文
android
事圆则缓1 天前
Android 多渠道打包实战:Product Flavors、签名、AAB 与发包校验
android