如何在安卓10中检测全屏手势模式

2022-09-01 13:24:04

在 Android 10 中,用户可以启用全屏手势模式。我想检测设备是否处于全屏手势模式。我在文档中找不到任何内容。如何在运行时以编程方式执行此操作?

Java或kotlin语言的答案是可以的。

任何官方 API 或解决方法...


答案 1

您可以使用以下代码检查手势或导航模式

    public static int isEdgeToEdgeEnabled(Context context) {
        Resources resources = context.getResources();
        int resourceId = resources.getIdentifier("config_navBarInteractionMode", "integer", "android");
        if (resourceId > 0) {
            return resources.getInteger(resourceId);
        }
        return 0;
    }

返回的值 isEdgeToEdgeEnabled 函数将如下所示:

  • 0:导航显示有 3 个按钮

  • 1:导航显示与2按钮(安卓P导航模式)

  • 2:全屏手势(安卓Q上的手势)


答案 2

我发现这篇文章在解释什么是WindowInsets以及如何使用它们方面非常有用。

基本上,我检查左手势插入是否大于,如果是,则系统正在使用手势类型导航。左右手势插图必须大于手势类型导航,因为您可以从右侧或左侧轻扫才能返回。00

int gestureLeft = 0;

if (Build.VERSION.SDK_INT >= 29) {
    gestureLeft = this.getWindow().getDecorView().getRootWindowInsets().getSystemGestureInsets().left;
}

if (gestureLeft == 0) {
    // Doesn't use gesture type navigation
} else {
    // Uses gesture type navigation
}

显然,必须渲染窗口才能使其正常工作。您可以将其添加到 OnApplyWindowInsetsListener 中,如果您希望它在窗口呈现后立即运行。

注意:我尝试使用 ,但即使我没有使用手势类型导航,它也返回了非零值。getSystemGestureInsets().bottom


推荐