什么是 "边到边模式" 在 Android 15
在 Android 15 的设备上系统会 强制/默认 启用 edge-to-edge 布局。App 的内容会扩展到屏幕的所有边缘(顶端状态栏下面、底部导航栏上面、甚至屏幕有刘海或挖孔的位置)。 系统的状态栏、导航栏默认是透明或半透明的,不再自动为 app 内容保留边缘空间遮挡(除非你处理 insets/安全区)。 Android Developers+2Android Developers+2
那么"显示边缘"的责任更多落在开发者身上:要处理内容与系统栏的重叠、使可交互控件不会被系统栏遮住。Android Developers+1
在 Android 15 中的行为变化(对开发者影响)
具体会有哪些变化,你需要注意:
万一你不做 | 会看起来怎样 | 需要做什么 |
---|---|---|
App target < 35 | 系统不会强制 edge-to-edge;状态栏/导航栏可能遮挡环境被系统做兼容处理 | 可选使用 WindowCompat.enableEdgeToEdge(...) 等 API 手动开启边缘模式。 Android Developers+1 |
App target ≥ 35,在 Android 15 上 | 默认内容会延伸到状态栏和导航栏的背后;状态栏默认透明;三按钮导航栏在某些模式下有半透明背景等 | 必须处理 window insets(系统栏、手势导航、安全区域、挖孔等)以保证 UI 不被遮挡或交互异常。Android Developers+1 |
开发者如何处理/实现 Edge-to-Edge
不容易被边到边搞崩 UI
在 Activity.onCreate(...) 开启 edge-to-edge(兼容旧版 Android)
javascript
WindowCompat.enableEdgeToEdge(window)
布局里处理 insets(安全区 + 系统栏区域)
使用 WindowInsetsCompat.Type.systemBars() 来获取状态栏 + 导航栏的 inset,给关键视图(按钮、AppBar、FAB 等)设 padding 或 margin,避免被遮住。Android Developers+2Stack Overflow+2
对于挖孔或显示 cutout 的设备,要设置 layoutInDisplayCutoutMode = ALWAYS(或者等价行为),保证内容可以在挖孔区域延展但安全内容不被遮住。Android Developers+1
背景/颜色处理
状态栏、导航栏颜色设置的 API 在 Android 15 下有些被弃用或行为变动,特别在手势导航模式下。你不能完全依赖设定导航栏色彩来"伪装"边缘。Android Developers+1
scrims 或遮罩(半透明背景)可能需要给系统栏提供背景,以确保内容在系统栏上方可辨并且可交互性好。Android Developers+1
使用中可能的坑/注意
- 控件被遮挡 ------ UI 元素(例如按钮、输入框、顶部工具栏、底部按钮)如果没有正确设置 padding/insets,就会被状态栏或导航栏遮住或点击区域不可用。
- 显示稳定性 ------ 状态栏透明 + 背后内容复杂,可能导致视觉不一致(比如状态栏图标因为背景太亮看不清),或者滚动时背景闪动等问题。
- 导航栏颜色 / 可对比性问题 ------ 在手势导航模式下用户期望导航栏背景或内容与 app 内容有对比度,否则图标可能看不见。
- 性能问题 ------ 在某些复杂布局里不断监听 insets 或频繁调整边界可能带来性能开销。