https://www.yisu.com/zixun/217057.html
目录
沉浸式状态栏相关API
| 对比维度 | android:fitsSystemWindows="true" |
android:windowTranslucentStatus="true" |
window.statusBarColor |
WindowCompat.setDecorFitsSystemWindows(window, false) |
|---|---|---|---|---|
| 本质 | 布局属性 | 主题属性 | Window API | Window API |
| 引入版本 | API 1 | API 19 | API 21 | API 30 (兼容库) |
| 核心作用 | 让View自动避让系统栏 | 让状态栏变半透明 | 设置状态栏颜色 | 让窗口不再自动避让系统栏 |
| 对Insets的影响 | 使用系统提供的Insets | 将状态栏Insets设为0 | 不影响Insets | 保留Insets,交出控制权 |
| 是否改变状态栏外观 | ❌ 不影响 | ✅ 变成半透明 | ✅ 改变颜色 | ❌ 不影响 |
| 是否能实现全屏 | ❌ 不能 | ⚠️ 部分能(内容上移) | ❌ 不能单独实现 | ✅ 可以(需配合监听) |
| 控制权 | 系统自动 | 系统自动 | 开发者手动 | 开发者手动 |
实现侵入有2种方式(全屏)
-
第1种:主题属性
android:windowTranslucentStatus="true",状态栏会固定半透明颜色且状态栏颜色API调用无效window.statusBarColor,View会侵入状态栏。 -
第2种:通过
WindowCompat.setDecorFitsSystemWindows(window, false),但是状态栏不会自动半透明,调用APIwindow.statusBarColor设置会生效。 -
第3种:通过
enableEdgeToEdgeAPI,此API是对WindowCompat.setDecorFitsSystemWindows(window, false)及状态栏设置为透明等方法的封装。
设置偏移距离
- 系统自动设置:android:fitsSystemWindows="true"
-
精确设置
ViewCompat.setOnApplyWindowInsetsListener是 Android 中处理窗口内边距(Insets)的核心API,它的作用是让你能够精确控制每个 View 如何响应系统栏(状态栏、导航栏、键盘等)的空间变化。ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { view, insets -> val systemBarsInsets = insets.getInsets( WindowInsetsCompat.Type.systemBars() ) // 这里你可以精确控制: // - 想让背景图全屏:不给 view 设置 padding // - 想让文字避开状态栏:给 TextView 设置 top padding // 例如:让整个布局延伸到状态栏后面 view.setPadding( view.paddingLeft, 0, // top padding 设为 0,内容就会顶到顶部 view.paddingRight, view.paddingBottom ) insets }
设置系统栏行为
windowInsetsController.systemBarsBehavior
0 条评论