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将仍然工作。