确保与手势导航兼容

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

  • 将应用内容扩展到屏幕边缘。
  • 处理存在冲突的应用手势。

此外,Android 13(API 级别 33)还引入了 预测性返回手势(适用于 Android) 其中包括手机、大屏设备和可折叠设备等 发布。应用开发者可采取措施来确保他们的应用支持 预测性返回手势

提供无边框应用内容

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

请参阅在应用中全屏显示内容 了解详情。

处理存在冲突的应用手势

手势导航模式可能会与之前的手势冲突 供应用开发者使用您可能需要针对应用的用户做出调整 对它们进行调用

与返回手势冲突

用于返回的新系统手势是从左侧或 屏幕右侧边缘。这可能会干扰 。保持左侧边缘和右侧边缘上元素的功能 选择性地停用返回手势,方法是通过 系统知道哪些区域需要接收触控输入。为此,您可以将 将List<Rect>发送到View.setSystemGestureExclusionRects() Android 10 中引入的 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,用于告知应用触摸识别阈值。

游戏和其他非视图型应用

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

如果游戏要求用户在主屏幕手势区域附近滑动,应用可以 请求在沉浸模式下展示。这会停用系统手势 当用户与游戏互动时,但让用户能够重新启用 通过从屏幕底部滑动来使用系统手势。

更新您的应用以支持预测性返回手势

Android 13(API 级别 33)针对手机、大屏设备和可折叠设备等 Android 设备引入了预测性返回手势。预测性返回 这项手势是多年来推出的一项功能完全实现后 允许用户在执行返回手势之前, 他们会完整填写该表单,这样他们就可以决定是继续学习,还是继续 当前视图

请参阅 添加对预测性返回手势的支持 了解详情。

其他资源

如需详细了解手势导航,请参阅以下内容:

博文

视频