Java 从Android Q中删除手势
我有一个儿童绘图应用程序,但Q中的手势一直在退出该应用程序。我试图删除系统的手势,但似乎不起作用 在这种情况下,我试图从系统手势中排除整个屏幕:Java 从Android Q中删除手势,java,gesture,android-10.0,Java,Gesture,Android 10.0,我有一个儿童绘图应用程序,但Q中的手势一直在退出该应用程序。我试图删除系统的手势,但似乎不起作用 在这种情况下,我试图从系统手势中排除整个屏幕: List<Rect> exclusionRects = new ArrayList(); public void onLayout(boolean changedCanvas, int left, int top, int right, int bottom) { if (Build.VERSION.SDK_INT >= B
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);
}
}
List exclusionRects=new ArrayList();
仅限公共空间布局(布尔值更改canvas、int left、int top、int right、int bottom){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.Q){
排除项。清除();
添加(新的矩形(左、上、右、下));
设置系统管理排除项(排除项);
}
}
如谷歌所述:
首先,为了确保可靠和一致的操作,背部姿势有一个200dp的垂直应用程序排除限制
这意味着操作系统将不允许您完全覆盖后退手势
这是有道理的,因为它是操作系统中相当基本的一部分,他们可能不希望允许应用程序完全删除手势,因为这不利于整个平台的一致性
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,以在用户从左边缘向右滑动时触发代码&从屏幕高度向右滑动以完全向左滑动
// '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);
}
});