特别是使用下面的代码,有没有办法修改它,使这个新创建的视图下的Activity不接收任何手势?
View v1 = new View(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
1000,
50,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.OPAQUE);
params.gravity = Gravity.BOTTOM;
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
wm.addView(v1, params);
8条答案
按热度按时间sz81bmfz1#
添加一个
onTouchEvent
方法到视图的top位置,然后返回true。True将告诉事件冒泡事件已被消费,因此防止事件冒泡到其他视图。对于
v1
,您可以执行导入:然后设置onTouchListener:
n9vozmp42#
来自代码
或
来自xml
这将防止触摸和单击事件传播到位于视图下方的视图。
或者,如果您扩展视图,则在.xml中添加
android:clickable="true"
o2g1uqev3#
你也可以这样做,你可以把touch listener设置为子视图,然后在
onTouch()
事件中,你可以阻止父视图的intercept touch event
-使用我从https://stackoverflow.com/revisions/19311197/1的答案中复制的代码-m528fe3b4#
你可以像下面这样添加一个视图,但要确保它是你添加到xml中的最后一个视图。xml中的最后一个项目是位于它下面所有其他视图之上的项目。
hsvhsicv5#
你只需要打个电话
在你的onTouch功能的开始。像这样-
oalqel3c6#
我认为最好的方法是添加一个触摸事件,并设置返回值True
如您所见:
返回True意味着顶视图正在处理触摸并且不需要将触摸事件移交给其它相关视图。
e0uiprwp7#
我有点晚了,但我不认为公认的解决方案是非常好的。这里是一个静态方法,接受任何数量的视图,并禁用此事件冒泡。这对我来说是100%的时间为API 17+(较低的未经测试)
您可以为您想要的任何类型的事件添加一个case,或者您可以摆脱开关并使默认case成为触摸侦听器中的唯一一行。
mec1mxoz8#
只需添加一个点击委托顶视图背景,这将停止下面的视图接收触摸