android View与View.GONE仍然接收onTouch和onClick

这让我很困惑:

据我所读,一个视图与setVisibility(View.GONE); 不应再收到任何触摸或点击事件。 我的布局有两个部分,这将是可见的或消失,以便其中只有一个是可见和可用的一次,但View.GONE不会做的伎俩。 按预期,我看不到GONE视图,但它仍然对onClick(并消耗另一个视图应该得到的事件)作出反应。

你可以帮我吗?

也许感兴趣:当我开始我的项目时,一个视图是GONE,另一个视图是可见的。 这一次它会按预期工作(GONE视图基本上被忽略),但通过代码设置View.GONE后,它将停止工作。

你可能使用animation来显示/隐藏视图? 当我使用具有android:fillEnabled =“true”的animation时,我得到这个行为android:fillAfter =“true”不明白它,似乎像一个错误 – 如果我使用animation没有fillEnabled / fillAfter,所有预期的作品。 ..

如果在某个animation(例如淡出setVisibility(View.GONE)之后设置了setVisibility(View.GONE) ,则尝试使用clearAnimation()清除animation。 这是对我的帮助。

在setVisibility(View.GONE)之后尝试使用setClickable(false)将可点击属性设置为false

是的, mview.clearAnimation()有一些问题,但mview.clearAnimation() amination.setFillAfter(false);mview.setClickable(false); 工作完美。

我期望的是发生的是你让一个视图看不见,但这个视图的孩子仍然对点击作出反应(即你的视图是一个ViewGroup)。 你可以做一些事情:

 private void hideTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { hideTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.GONE); } else { v.setClickable(false); v.setVisibility(View.GONE); } } 

当然你也必须做相反的事情

 private void showTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { showTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.VISIBLE); } else { v.setClickable(true); v.setVisibility(View.VISIBLE); } } 

这在过去对我有效。 我目前不知道有更好的方法来做到这一点。

我会张贴这个评论,但不幸的是我无法发表评论。 因为这可能是一个可能的解决scheme,我张贴这样的方式:

在您编写“onClick”时,我假设您在XML布局中使用了onClick属性。 尝试使用setOnClickListener而不是onClick属性来设置OnClickListener 。 也许这有助于…

尝试在onAnimationEnd覆盖中添加.clearAnimation()。

如果在视图中有一个animation,你应该调用view.clearAnimation。

对于那些做了上面的答案,仍然没有解决他们的问题,我build议从父视图中删除视图。 如果您需要再次显示视图,只需复制并将其添加到父视图。

这似乎有点矫枉过正,但我​​隐藏/显示整个视图组在你的情况下,它可能是一个button,textview或图像,这个解决scheme将仍然工作。