确保与手势导航兼容

从 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

例如:

KotlinJava
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)
}
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 设备引入了预测性返回手势。预测性返回 这项手势是多年来推出的一项功能完全实现后 允许用户在执行返回手势之前, 他们将全部完成,这样他们就可以决定是继续学习,还是继续学习 当前视图

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

其他资源

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

博文

视频