禁用所有视图的触摸事件

59

如何禁用所有视图的触摸事件是最佳方法?


抱歉,请问这个更改的目标是什么?您可以编写一个递归过程,以更改每个视图的onTouchEvent()。 - carlovv
在你的root_layout上调用setEnabled(false); - ingsaurabh
你想让用户只在 Android 设备上使用按钮吗?;) - yosh
@T0X1C:这正是我要找的。但它不起作用。 - Gratzi
@yosh:我不想永久禁用它们。我只想在某个时候能够禁用当前活动的视图。 - Gratzi
@Gratzi,那个有什么问题?我的意思是你在做这件事时遇到了什么问题? - ingsaurabh
15个回答

2

整个应用程序可能无法实现此功能。您需要为每个视图覆盖onTouchEvent()方法并忽略用户输入。


0
根据您的评论: 我只想在某个时刻禁用当前活动的视图 您似乎想要禁用当前活动中所有触摸,而不管触摸的视图。
在适当的时候从Activity.dispatchTouchEvent(MotionEvent)覆盖方法返回true将消耗触摸并有效地实现此目的。该方法是一系列触摸方法调用中的第一个方法。

0
如果您想禁用特定布局中的所有视图,一种解决方案是添加一个遮罩层(一个填充整个布局的前景视图),以消耗所有触摸事件,从而不将任何事件分派给该布局中的其他视图。
具体来说,您需要先在XML文件中向布局添加一个视图(请注意,它应该放置在所有其他视图之后),例如:
<FrameLayout>
  ... // other views
  <View
    android:id="@+id/vCover"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  />
</FrameLayout>

然后,在您的代码中记得为该视图设置点击监听器,以便它消耗触摸事件,例如

override fun onCreate(savedInstanceState: Bundle?) {
  viewBinding.vCover.setOnClickListener {}
}

这就是你所需要的全部。

当你想要启用所有视图时,只需要将封面 移除


-1
这对我有用,我创建了一个空方法并将其命名为doNothing
   public void doNothing(View view)
{

}

然后从我想要禁用触摸事件的所有对象的onClick事件中调用此方法。android:onClick="doNothing"

当单击或触摸事件被触发时,不会处理任何内容。


-3
另外一种更简单的方法是通过布局(即.xml)文件禁用它: 只需添加

即可。
 android:shouldDisableView="True"

对于您想要禁用触摸事件的视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接