从 Android 10(API 级别 29)开始,Android 系统支持完全基于手势的导航。应用开发者必须执行以下两项操作,以确保其应用与此功能兼容:
- 将应用内容扩展到屏幕边缘。
- 处理存在冲突的应用手势。
此外,Android 13(API 级别 33)针对手机、大屏设备和可折叠设备等 Android 设备引入了预测性返回手势,该手势是多年发布计划的一部分。应用开发者可以采取措施,确保其应用支持预测性返回手势。
提供全屏应用内容
如需充分利用悬浮式导航栏提供的额外屏幕空间,您需要在应用中进行某些更改。
如需了解详情,请参阅在应用中全屏显示内容。
处理冲突的应用手势
手势导航模式可能会与应用开发者之前使用的手势发生冲突。因此,您可能需要调整应用的界面。
与返回手势冲突
新的返回系统手势是从屏幕左侧或右侧边缘向内滑动。这可能会干扰这些区域中的应用导航元素。为了保持屏幕左右边缘元素的功能,请通过向系统指明哪些区域需要接收触控输入,选择性地停用返回手势。为此,您可以将 List<Rect> 传递给 Android 10 中引入的 View.setSystemGestureExclusionRects() API。自 androidx.core:core:1.1.0-dev01 起,ViewCompat 中也提供了此方法。
例如:
Kotlin
var exclusionRects = listOf(rect1, rect2, rect3) fun onLayout( changedCanvas: Boolean, left: Int, top: Int, right: Int, bottom: Int) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects) } fun onDraw(canvas: Canvas) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects) }
Java
List<Rect> exclusionRects; public void onLayout( boolean changedCanvas, int left, int top, int right, int bottom) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects); } public void onDraw(Canvas canvas) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects); }
与主屏幕手势或快速切换手势冲突
用于返回主屏幕和快速切换的新系统手势都涉及在屏幕底部(之前由导航栏占据的空间)滑动。应用无法像停用返回手势那样停用这些手势。
为了缓解此问题,Android 10 引入了 WindowInsets.getMandatorySystemGestureInsets() API,该 API 会向应用告知触摸识别阈值。
游戏和其他非视图型应用
游戏和其他没有视图层次结构的应用通常需要用户在系统手势区域附近滑动。在这些情况下,游戏可以使用 Window.setSystemGestureExclusionRects() 排除与为系统手势预留的区域重叠的区域。游戏必须确保仅在必要时(例如在游戏过程中)排除这些区域。
如果游戏要求用户在主屏幕手势区域附近滑动,应用可以请求以沉浸模式布局。这会在用户与游戏互动时停用系统手势,但允许用户通过从屏幕底部滑动来重新启用系统手势。
更新您的应用以支持预测性返回手势
Android 13(API 级别 33)针对手机、大屏设备和可折叠设备等 Android 设备引入了预测性返回手势。预测性返回手势是多年发布计划的一部分。完全实现后,此功能将使用户能够在完全执行返回手势之前预览返回手势的目的地或其他效果,这样他们就可以决定是继续操作还是留在当前视图中。
如需了解详情,请参阅添加对预测性返回手势的支持。
其他资源
如需详细了解手势导航,请参阅以下内容: