如何在安卓10中检测全屏手势模式
2022-09-01 13:24:04
在 Android 10 中,用户可以启用全屏手势模式。我想检测设备是否处于全屏手势模式。我在文档中找不到任何内容。如何在运行时以编程方式执行此操作?
Java或kotlin语言的答案是可以的。
任何官方 API 或解决方法...
在 Android 10 中,用户可以启用全屏手势模式。我想检测设备是否处于全屏手势模式。我在文档中找不到任何内容。如何在运行时以编程方式执行此操作?
Java或kotlin语言的答案是可以的。
任何官方 API 或解决方法...
您可以使用以下代码检查手势或导航模式
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上的手势)
我发现这篇文章在解释什么是WindowInsets
以及如何使用它们方面非常有用。
基本上,我检查左手势插入是否大于,如果是,则系统正在使用手势类型导航。左右手势插图必须大于手势类型导航,因为您可以从右侧或左侧轻扫才能返回。0
0
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