kja*_*on2 5 android gesture-recognition gesture android-orientation onbackpressed
TLDR:我需要一种以编程方式禁用 Android 10 手势导航的方法,以便他们在从侧面滑动时不会意外返回
背景故事:Android 10 引入了手势导航,而不是底部的按钮。因此,现在在启用了该功能的 Android 10 设备上,他们可以从屏幕任意一侧滑动以返回,从底部滑动以导航至主页或在应用程序之间导航。然而,我正在研究 AR 中的实现,并希望将屏幕锁定为纵向,但允许用户横向显示。
如果用户将手机转为横向,但活动锁定为纵向,则返回手势导航现在是从顶部滑动,这是在全屏应用程序(就是这个)中访问状态栏的常见方式,因此用户如果他们习惯了 Android 导航,他们会不经意地返回并留下体验。
有谁知道如何a)以编程方式禁用Android 10的手势导航(但用户如何返回/回家?)或b)知道如何仅更改手势方向而不需要您的活动支持横向?
以编程方式阻止手势非常容易,但不能对两侧的整个边缘执行此操作。那么您必须决定要在屏幕的多少部分禁用手势?
这是代码:
在您的 Utils 类中定义此代码。
static List<Rect> exclusionRects = new ArrayList<>();
public static void updateGestureExclusion(AppCompatActivity activity) {
if (Build.VERSION.SDK_INT < 29) return;
exclusionRects.clear();
Rect rect = new Rect(0, 0, SystemUtil.dpToPx(activity, 16), getScreenHeight(activity));
exclusionRects.add(rect);
activity.findViewById(android.R.id.content).setSystemGestureExclusionRects(exclusionRects);
}
public static int getScreenHeight(AppCompatActivity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
return height;
}
public static int dpToPx(Context context, int i) {
return (int) (((float) i) * context.getResources().getDisplayMetrics().density);
}
Run Code Online (Sandbox Code Playgroud)
检查您的布局是否在要排除边缘手势的活动中设置,然后应用此代码。
// 'content' is the root view of your layout xml.
ViewTreeObserver treeObserver = content.getViewTreeObserver();
treeObserver.addOnGlobalLayoutListener(new
ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
SystemUtil.updateGestureExclusion(MainHomeActivity.this);
}
});
Run Code Online (Sandbox Code Playgroud)
我们将排除矩形宽度添加到 16dp 以获取后退手势,您可以根据自己的喜好进行更改。
以下是一些需要注意的事项:-
希望这能永久解决您的问题。:)
| 归档时间: |
|
| 查看次数: |
8534 次 |
| 最近记录: |