禁用所有视图的触摸事件的最佳方法是什么?
非常感谢,
的Gratzi
答案 0 :(得分:54)
以下是禁用某些视图组的所有子视图的功能:
/**
* Enables/Disables all child views in a view group.
*
* @param viewGroup the view group
* @param enabled <code>true</code> to enable, <code>false</code> to disable
* the views.
*/
public static void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View view = viewGroup.getChildAt(i);
view.setEnabled(enabled);
if (view instanceof ViewGroup) {
enableDisableViewGroup((ViewGroup) view, enabled);
}
}
}
答案 1 :(得分:16)
覆盖活动的dispatchTouchEvent
方法,如下所示:
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
return true;//consume
}
如果您返回true
,则会禁用所有触摸事件。
返回false
让它们正常工作
答案 2 :(得分:14)
你可以尝试:
your_view.setEnabled(false);
应该禁用触摸事件。
或者你可以试试(感谢Ercan):
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
return true;//consume
}
或
public boolean dispatchTouchEvent(MotionEvent ev) {
if(!onInterceptTouchEvent()){
for(View child : children){
if(child.dispatchTouchEvent(ev))
return true;
}
}
return super.dispatchTouchEvent(ev);
}
答案 3 :(得分:11)
这段代码基本上会将此事件传播到父视图,允许触摸事件,当且仅当 cursor : move;
变量设置为inProgress
时。
false
答案 4 :(得分:4)
使用它。返回true表示监听器已经消耗了该事件,并且android不需要做任何事情。
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
答案 5 :(得分:3)
如何覆盖所有视图的透明视图并捕获所有触摸事件?
答案 6 :(得分:2)
整个申请可能无法实现。您必须为每个视图覆盖onTouchEvent()并忽略用户输入。
答案 7 :(得分:2)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
答案 8 :(得分:0)
根据你的评论:
我只是希望能够在某些时候禁用当前活动的视图
您似乎想要禁用当前活动的所有触摸,无论触摸的视图如何。
在适当的时间从true
的覆盖中返回Activity.dispatchTouchEvent(MotionEvent)
将消耗触摸并有效地完成此操作。这种方法是触摸方法调用链中的第一个。
答案 9 :(得分:0)
另一种更简单的方法是通过布局(即.xml)文件禁用它: 只需添加
android:shouldDisableView="True"
对于您要禁用触摸事件的视图。
答案 10 :(得分:0)
在科特林:
fun View.setEnabledRecursively(enabled: Boolean) {
isEnabled = enabled
if (this is ViewGroup)
(0 until childCount).map(::getChildAt).forEach { it.setEnabledRecursively(enabled) }
}
// usage
import setEnabledRecursively
myView.setEnabledRecursively(false)
答案 11 :(得分:0)
最简单的方法是
private fun enableDisableActivty(isEnable : Boolean){
if(!isEnable) window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
else window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
}
答案 12 :(得分:0)
这对我有用,我创建了一个空方法并将其命名为 doNothing
。
public void doNothing(View view)
{
}
然后在我想禁用触摸事件的所有对象上从 onClick
事件调用此方法。 android:onClick="doNothing"
当点击或触摸事件被触发时,没有任何处理。