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

相关推荐
爱笑鱼6 小时前
Binder(八):远端进程死了,BinderProxy 为什么还能收到通知?
android
zhangphil7 小时前
Android ContentProvider/ContentResolver读图片,跨进程 IPC慢
android
yueqc17 小时前
Android .so 文件压缩
android·so·包体积
龚礼鹏8 小时前
深入解析 Android Automotive (AAOS) 启动流程与 CarService 核心机制(基于 Android 16 最新源码视角)
android
rosmis8 小时前
agent各指标定义
android·java·开发语言
风样滴男人哟9 小时前
PHP特性之反射类ReflectionClass机制
android·开发语言·php
小孔龙10 小时前
RenderNode 与 DisplayList:Android 硬件加速的绘制记录与复用
android·性能优化
qizayaoshuap10 小时前
鸿蒙 ArkTS 实战:搜索列表 城市实时过滤(示例 94)
android·华为·harmonyos
朝星11 小时前
Framework筑基之Handler消息机制5(应用层)
android
2601_9657984711 小时前
ForumLab Review: Fast PHP Script for SEO Forum Sites
android·adb·php