1

我有一个儿童绘图应用程序,但 Q 中的手势不断退出应用程序。我尝试删除系统手势,但它似乎不起作用。

在这种情况下,我试图从系统手势中排除整个屏幕:

List<Rect> exclusionRects = new ArrayList();

public void onLayout(boolean changedCanvas, int left, int top, int right, int bottom) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        exclusionRects.clear();
        exclusionRects.add(new Rect(left, top, right, bottom));
        setSystemGestureExclusionRects(exclusionRects);
    }
}
4

2 回答 2

2

正如谷歌所说:

首先,为确保可靠和一致的操作,Back 手势有 200dp 的垂直应用排除限制。

https://android-developers.googleblog.com/2019/08/final-beta-update-official-android-q.html

这意味着操作系统将不允许您完全覆盖后退手势。

这是有道理的,因为它是操作系统的一个相当基本的部分,他们可能不希望应用程序完全删除手势,因为这不利于整个平台的一致性

于 2019-08-13T08:07:02.123 回答
0

尝试这个。

  1. 在 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);
     }
    
  2. 检查您的布局是否设置在要排除边缘 getures 的那个活动中,然后应用此代码。

     // '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);
         }
     });
    
  • 我们将视图宽度添加到 16dp 以在用户从左边缘和高度向右滑动到屏幕高度以完全左侧完成时触发代码。
于 2020-12-17T09:59:39.493 回答