手势导航:缺少 ViewCompat 中的 setSystemGestureExclusionRects() 方法 class

Gesture navigation: missing the setSystemGestureExclusionRects() method in the ViewCompat class

Android 有 View.setSystemGestureExclusionRects() API 可以在 Android 10 的指定区域禁用 "back" 手势。添加此 API在API级别29,所以在使用前一定要检查SDK版本:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
   view.systemGestureExclusionRects = listOf(...)
}

The official documents says,即ViewCompat class也包含setSystemGestureExclusionRects()方法。它将允许避免检查 SDK 版本:

ViewCompat.setSystemGestureExclusionRects(...)

此方法必须从 androidx.core:core:1.1.0-dev01 开始可用。在我的项目中,我有 implementation 'androidx.core:core:1.1.0' 依赖项。版本“1.1.0”晚于“1.1.0-dev01”,但缺少ViewCompat.setSystemGestureExclusionRects()方法。为什么?

这看起来像是一个文档错误。您会在 1.2.0 中找到它。例如,here is the ViewCompat from 1.2.0-rc01,当前最新版本(截至 2020 年 1 月 10 日)。它具有您寻求的功能......虽然它几乎就是您的代码片段显示的内容,但仅在 Java:

/**
 * Sets a list of areas within this view's post-layout coordinate space where the system
 * should not intercept touch or other pointing device gestures. <em>This method should
 * be called by {@link View#onLayout(boolean, int, int, int, int)} or
 * {@link View#onDraw(Canvas)}.</em>
 * <p>
 * On devices running API 28 and below, this method has no effect.
 *
 * @param rects A list of precision gesture regions that this view needs to function correctly
 * @see View#setSystemGestureExclusionRects
 */
public static void setSystemGestureExclusionRects(@NonNull View view,
        @NonNull List<Rect> rects) {
    if (Build.VERSION.SDK_INT >= 29) {
        view.setSystemGestureExclusionRects(rects);
    }
}

FWIW,我提交了 a bug report about the documentation error