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

相关推荐
我命由我1234520 小时前
Android 开发中,关于 Gradle 的 distributionUrl 的一些问题
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
su_ym811020 小时前
Android 系统源码阅读与编译构建实战指南
android·framework
方白羽20 小时前
《被封印的六秒:大厂外包破解 Android 启动流之谜》
android·app·android studio
IT乐手1 天前
java 对比分析对象是否有变化
android·java
做时间的朋友。1 天前
MySQL 8.0 窗口函数
android·数据库·mysql
举儿1 天前
通过TRAE工具实现贪吃蛇游戏的全过程
android
守月满空山雪照窗1 天前
深入理解 MTK FPSGO:Android 游戏帧率治理框架的架构与实现
android·游戏·架构
阿凤211 天前
uniapp运行到app端怎么打开文件
android·前端·javascript·uni-app
学习使我健康1 天前
Android 事件分发机制
android·java·前端
贵沫末1 天前
Claude Code For VS Code安装以及跳过认证
android