确保与手势导航兼容

从 Android 10(API 级别 29)开始,Android 系统支持完全基于手势的导航。应用开发者必须执行两件事以确保其应用与此功能兼容

  • 将应用内容从边缘扩展到边缘。
  • 处理冲突的应用手势。

此外,Android 13(API 级别 33)引入了 预测后退手势,适用于手机、大屏幕和折叠屏等 Android 设备,并且是多年发布的一部分。应用开发者可以采取措施确保其应用支持预测后退手势。

提供边缘到边缘的应用内容

要利用浮动导航栏提供的额外屏幕空间,您需要在应用中配置某些更改。

有关详细信息,请参阅 在您的应用中边缘到边缘显示内容

处理冲突的应用手势

手势导航模型可能会与应用开发者以前使用的手势发生冲突。结果,您可能需要调整应用的用户界面。

与后退手势冲突

新的系统后退手势是从屏幕左侧或右侧边缘向内滑动。这可能会干扰这些区域中的应用导航元素。为了保持屏幕左右边缘元素的功能,通过指示系统哪些区域需要接收触摸输入来有选择地退出后退手势。您可以通过将 List<Rect> 传递给 Android 10 中引入的 View.setSystemGestureExclusionRects() API 来执行此操作。此方法也可在 ViewCompat 中使用,版本为 androidx.core:core:1.1.0-dev01

例如

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 通知应用触摸识别阈值。

游戏和其他非 View 应用

游戏和其他没有视图层次结构的应用通常要求用户在系统手势区域附近滑动。在这些情况下,游戏可以使用 Window.setSystemGestureExclusionRects() 排除与系统手势保留区域重叠的区域。游戏必须确保仅在必要时排除这些区域,例如在游戏过程中。

如果游戏要求用户在主页手势区域附近滑动,则应用可以请求以 沉浸模式 进行布局。这会在用户与游戏交互时禁用系统手势,但允许用户通过从屏幕底部滑动重新启用系统手势。

更新您的应用以支持预测后退手势

Android 13(API 级别 33)为手机、大屏幕和折叠屏等 Android 设备引入了预测后退手势。预测后退手势是多年发布的一部分。完全实施后,此功能允许用户在完全完成后退手势之前预览目标或后退手势的其他结果,从而让他们可以决定是继续还是停留在当前视图中。

有关详细信息,请参阅 添加对预测后退手势的支持

其他资源

要了解有关手势导航的更多信息,请参阅以下内容

博文

视频