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

相关推荐
乾坤一气杀16 小时前
Kotlin 协程线程切换原理 —— 以 Dispatchers.IO 为例
android
小书房16 小时前
Android各版本主要新特性
android
兄弟加油,别颓废了。17 小时前
ctf.show_web3
android
火柴就是我17 小时前
代码记录android怎么实现状态栏导航栏隐藏
android·flutter
梦里花开知多少17 小时前
浅谈ThreadPool
android·面试
帅次17 小时前
单例初始化中的耗时操作如何拖死主线程
android·webview·android runtime
用户08748819991718 小时前
Android 资源类型全解析及四大常用布局资源深度指南
android
火锅鸡的味道18 小时前
解决AOSP工程Android Studio打开卡顿
android·python·android studio
2501_9159214318 小时前
2026 iOS 上架新趋势 iOS 发布流程模块化
android·ios·小程序·https·uni-app·iphone·webview