Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阻止Android 10+;整个屏幕的反向滑动手势_Android - Fatal编程技术网

阻止Android 10+;整个屏幕的反向滑动手势

阻止Android 10+;整个屏幕的反向滑动手势,android,Android,我试图在我的游戏中禁用Android 10+手势导航回刷(出于一个非常合理的原因)。我需要禁用整个屏幕的滑动手势 谷歌的文档对如何做到这一点非常模糊 这就是我尝试过的。getWindow().SetSystemGestureExclutions(ExclutionRects)如果直接在onCreate中执行,则在启动时会导致即时崩溃。我得到的错误是:java.lang.IllegalStateException:未添加视图 我的第二次尝试是将addOnLayoutChangeListener中的

我试图在我的游戏中禁用Android 10+手势导航回刷(出于一个非常合理的原因)。我需要禁用整个屏幕的滑动手势

谷歌的文档对如何做到这一点非常模糊

这就是我尝试过的。getWindow().SetSystemGestureExclutions(ExclutionRects)如果直接在onCreate中执行,则在启动时会导致即时崩溃。我得到的错误是:java.lang.IllegalStateException:未添加视图

我的第二次尝试是将addOnLayoutChangeListener中的系统手势排除矩形设置为根布局中包含的(唯一)视图,以便手势排除内容仅在视图正常运行时运行。在本例中,假设initializeForView是一个返回有效视图的函数。除了不被阻挡的手势之外,一切都正常

由于某些原因,我尝试的这段代码只会阻止屏幕下半部分的回扫手势:(

@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
游戏=新锁颚(本);
AndroidApplicationConfiguration配置=新的AndroidApplicationConfiguration();
RelativeLayout布局=新的RelativeLayout(此);
layout.setFitsSystemWindows(真);
视图=初始化ForView(游戏,配置);
布局。添加视图(视图);
setContentView(布局);
view.addOnLayoutChangeListener(新视图.OnLayoutChangeListener(){
@凌驾
public void onLayoutChange(视图v、int left、int top、int right、int bottom、int oldLeft、,
整数oldTop、整数oldRight、整数oldBottom){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.Q){
列表排除项=新的ArrayList();
Rect visibleRect=new Rect();
v、 getWindowVisibleDisplayFrame(visibleRect);
排除项。添加(visibleRect);
getWindow().SetSystemGestureExclutions(ExclutionRects);
}
}
});
}
  • 在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);
     }
    
    • 我们将视图宽度添加到16dp,以在用户从左边缘向右滑动时触发代码&从屏幕高度向右滑动以完全向左滑动
     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);
     }
    
     // '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);
         }
     });