-
改变系统栏颜色
-
处理视觉冲突(系统中的一些视图/组件会被系统栏遮盖)
-
二、处理存在冲突的应用手势
-
- 1.什么是冲突手势
-
2.解决冲突手势
-
- 返回手势冲突
-
与主屏幕/快速切换手势存在冲突
-
游戏和其他非视图型应用
-
总结
[](()前言
=============================================================
从 Android 10(API 级别 29)开始,Android 系统支持完全基于手势的导航。为确保应用与此功能兼容,应用开发者应完成以下两项任务:
1.将应用内容扩展到屏幕边缘(全面屏)。
2.处理存在冲突的应用手势。
[](()一、全面屏
================================================================
[](()1.什么是全面屏
默认情况下,应用内容的绘制范围从顶部状态栏下方开始,延伸至底部导航栏上方。(状态栏和导航栏统称为系统栏)
Android 10 及以上版,大多数设备均保留了三键导航模式 (后退、返回首页、最近使用的应用)。
[](()2.实现全面屏
[](()请求全屏布局
首先将布局扩展至系统栏后方,需要使用setSystemUiVisibility()API以全屏模式布局,我们关注几个接受值:
view.systemUiVisibility =
//告诉系统,窗口希望将内容放置在最极端的情况下
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
//告诉系统,窗口希望将内容布局为隐藏的导航栏
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
setSystemUiVisibility()具体参考:
[setSystemUivisibility详解](()
[Andorid开发者文档](()
设置完毕后可以看到应用的内容出现在导航栏的后面:
[](()改变系统栏颜色
Android10中,只需要将系统栏的颜色设置为透明即可:
但是在Android9及以下还没有支持手势导航,需要把系统栏设置为半透明,以确保内容可以看见
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QjZ6rEOF-1650996259130)(https://img-blog.csdnimg 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 .cn/20210101184100697.png#pic_center)]
[](()处理视觉冲突(系统中的一些视图/组件会被系统栏遮盖)
如果应用为自定义视图层次结果,需要手动占用系统窗口边衬区,可以通过实现OnApplyWindowInsetsListener 接口做到这一点:
view.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// 1. 通过 insets.getsystemwindowinsettop ()将视图从上到下移动
// 2. 通过 insets.getsystemwindowinsetbottom ()在底部边缘上移动视图
// 3.还要检查 getsystemwindowinsetleft/right () ,例如 landscape
return insets.consumeSystemWindowInsets();
}
});
例如,给某一个组件增加边距,使其不被系统栏覆盖(要确保接口计算要有幂等性):
ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->
left/right () ,例如 landscape
return insets.consumeSystemWindowInsets();
}
});
例如,给某一个组件增加边距,使其不被系统栏覆盖(要确保接口计算要有幂等性):
ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->