0
点赞
收藏
分享

微信扫一扫

浅谈手势导航

  • 改变系统栏颜色

  • 处理视觉冲突(系统中的一些视图/组件会被系统栏遮盖)

  • 二、处理存在冲突的应用手势

    • 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开发者文档](()

设置完毕后可以看到应用的内容出现在导航栏的后面:

1

[](()改变系统栏颜色

Android10中,只需要将系统栏的颜色设置为透明即可:

2

但是在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 ->

举报

相关推荐

0 条评论