防止用户触摸Android设备屏幕的一部分,同时允许用户触摸其他地方

防止用户触摸Android设备屏幕的一部分,同时允许用户触摸其他地方,android,Android,基本上,我想做的是用一个透明的视图覆盖部分屏幕,以防止用户与Android中的部分屏幕交互。通过查看其他SO帖子,我找到了一个部分有效的解决方案。例如,要覆盖屏幕的左半部分,我可以这样做: Context mContext = getApplicationContext(); WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display

基本上,我想做的是用一个透明的视图覆盖部分屏幕,以防止用户与Android中的部分屏幕交互。通过查看其他SO帖子,我找到了一个部分有效的解决方案。例如,要覆盖屏幕的左半部分,我可以这样做:

Context mContext = getApplicationContext();    

WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = mWindowManager.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int mScreenWidth = size.x;
int mScreenHeight = size.y;

View leftBox = new View(mContext);
WindowManager.LayoutParams leftBoxParams = new WindowManager.LayoutParams();
leftBoxParams.height = mScreenHeight;
leftBoxParams.width = mScreenWidth/2;
leftBoxParams.gravity = Gravity.LEFT;
leftBoxParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
leftBoxParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
leftBoxParams.alpha = 0.0f;
leftBox.setBackgroundColor(Color.TRANSPARENT);

mWindowManager.addView(leftBox, leftBoxParams);
在大多数情况下,上述操作都是正确的:如果屏幕左侧有一个按钮,用户无法触摸它,而右侧的按钮仍然可以访问。但是,如果用户触摸右侧的可访问按钮,同时触摸屏幕左侧的任何位置,则该按钮将永远不会收到单击事件。这意味着,如果用户将手放在屏幕的左半部分,则右侧基本上无法使用

需要注意的是,我正在AsyncTask中创建透明视图,覆盖下的内容可能是其他应用程序的一部分,而不仅仅是我的

从Android开发者网站上看,我想要的似乎是FLAG_NOT_TOUCH_model:

窗口标志:即使此窗口可聚焦(未设置其标志\u NOT \u focusable),也允许将窗口外的任何指针事件发送到其后面的窗口


然而,无论是这个标志还是非聚焦标志都不能修复我看到的行为。任何关于我为什么会看到这种行为或如何修复这种行为的建议都是非常感谢的。

在一个位置按下一个手指不会在其他任何地方触发单击事件,我认为这对于许多应用程序都是正确的。你为什么要避免点击左侧?禁用按钮不是要少很多工作吗?@McAdam331在我自己的应用程序中禁用按钮当然更容易。然而,这个覆盖可能覆盖了我无法控制的其他应用程序。我确实意识到,在一个地方按下一个手指通常可以防止点击事件在其他地方触发,我只是希望在我的情况下避免它。至于原因:对于250个字符来说,这有点复杂,但一般来说,我的应用程序就像一个指南,与用户一起完成其他应用程序的设置步骤,所以它希望防止用户触摸错误的东西,比如showcase视图?我想这是我以前见过的名字。不完全是这样,但这是一个很好的类比。最大的区别是,showcase视图比我的应用程序所期望的要温和一点。我的应用程序旨在用于需要尽可能多地保证正确安装的商业环境,这意味着我正在努力使它即使是一只黑猩猩随机触摸屏幕也不会把它弄糟。你可以随时检查是否有猴子:在一个位置按下一个手指不会在其他任何地方触发点击事件,我认为这对很多应用程序都是正确的。你为什么要避免点击左侧?禁用按钮不是要少很多工作吗?@McAdam331在我自己的应用程序中禁用按钮当然更容易。然而,这个覆盖可能覆盖了我无法控制的其他应用程序。我确实意识到,在一个地方按下一个手指通常可以防止点击事件在其他地方触发,我只是希望在我的情况下避免它。至于原因:对于250个字符来说,这有点复杂,但一般来说,我的应用程序就像一个指南,与用户一起完成其他应用程序的设置步骤,所以它希望防止用户触摸错误的东西,比如showcase视图?我想这是我以前见过的名字。不完全是这样,但这是一个很好的类比。最大的区别是,showcase视图比我的应用程序所期望的要温和一点。我的应用程序旨在用于一个商业环境,在这个环境中,需要尽可能多地保证安装正确,这意味着我正在尝试这样做,以便即使是黑猩猩随机触摸屏幕也不会把它弄糟。你可以随时检查是否有猴子: