首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 10手势导航禁用

Android 10手势导航禁用
EN

Stack Overflow用户
提问于 2020-04-11 05:42:43
回答 2查看 3.4K关注 0票数 1

TLDR:我需要一种方法来通过编程禁用Android10手势导航,这样他们在从侧面滑动时就不会意外返回

背景: Android 10引入了手势导航,而不是底部的按钮。因此,现在在启用了该功能的Android 10设备上,他们可以从屏幕的任意一侧滑动,返回并从底部滑动,以导航到主页或在应用程序之间切换。然而,我正在AR的一个实现上工作,并希望将屏幕锁定为肖像,但允许用户去景观。

如果用户将手机转向横向,但活动锁定为纵向,则返回手势导航现在是从顶部滑动,这是在全屏应用程序中访问状态栏的常见方式(这个就是这样),因此如果用户习惯于android导航,则会无意中返回并离开体验。

有谁知道如何a)禁用手势导航(但用户如何返回/回家?)或者b)知道如何只改变手势的方向,而不需要你的activity来支持横向?

EN

回答 2

Stack Overflow用户

发布于 2021-07-28 12:00:30

通过编程来阻止手势是很容易的,但你不能对两边的整个边缘都这样做。所以你必须决定你想在屏幕的多少部分禁用这些手势?

代码如下:

  • 在您的Utils类中定义此代码。

静态列表exclusionRects = new ArrayList<>();公共静态空updateGestureExclusion(AppCompatActivity activity) { if (Build.VERSION.SDK_INT < 29) updateGestureExclusion;exclusionRects.clear();rect Rect = new Rect(0,0,SystemUtil.dpToPx(activity,16),getScreenHeight( activity) );exclusionRects.add(rect);rect}公共静态int getScreenHeight(AppCompatActivity Activity){ displayMetrics DisplayMetrics = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);int height = context.getResources().getDisplayMetrics().density);;return height;} public static int context(context context,int i) { return (int) (displayMetrics.heightPixels) i) *dpToPx }

// 'content‘是布局xml的根视图。新覆盖treeObserver = content.getViewTreeObserver();treeObserver.addOnGlobalLayoutListener( ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { content.getViewTreeObserver().removeOnGlobalLayoutListener(this);SystemUtil.updateGestureExclusion(MainHomeActivity.this);} });

以下是一些需要注意的事项:

  • ,你不能阻止两边的手势。如果你这样做,它将是最糟糕的用户活动是矩形的高度,所以如果你想阻止左侧和屏幕上半部分的手势,那么只需将它替换为getScreenHeight(activity)/2
  • 1st参数,因为我们想要将手势放在左侧,如果你想要它在右侧,那么简单地放-“getScreenWidth( experience.
  • "getScreenHeight(activity)”)- SystemUtil.dpToPx(activity,16)"

希望这能永久地解决你的问题。:)

票数 0
EN

Stack Overflow用户

发布于 2020-04-11 21:19:43

并不是AB选项的真正答案。但至少用户在从侧面滑动时不会意外地返回。

因此,如果设备是Android10,并且用户执行go back,那么如果用户真的想返回还是不想返回,我就创建AlertDialog。虽然提示符也会显示,但即使他们没有激活gesture navigation (仍然使用2个或3个按钮导航)。

代码语言:javascript
复制
@Override
public void onBackPressed() {
    if(android.os.Build.VERSION.SDK_INT >= 29) { //as long as the Device is Android 10 (API level 29) 
        // idk, need more condition like gestureNavigation.isActive()
        AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);


        builder
            .setMessage("Are you sure want to exit?")
            .setPositiveButton("Yes, let me out",  new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog,int id) {
                    YourActivity.super.onBackPressed();
                }
            })
            .setNegativeButton("No, wrong swipe/click", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            })
            .show();
    } else {
        super.onBackPressed();
    }
}

将此视为替代的最后手段。希望能有所帮助

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61149117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档