这令我感到困惑:
据我所知,使用setVisibility(View.GONE)的视图;不应再接收任何触摸或点击事件。 我的布局有两个部分,它们将是可见的或消失的,因此一次只能看到其中一个部分,但View.GONE不能解决问题。 我无法按预期看到GONE视图,但它仍然对onClick做出反应(并使用其他视图应该获取的事件)。
你能帮助我吗?
也许有兴趣: 当我开始我的项目时,一个视图是GONE,另一个视图是可见的。这次它将按预期工作(GONE视图基本上被忽略),但在通过代码设置View.GONE后它将停止工作。
答案 0 :(得分:108)
您是否可以使用动画来显示/隐藏视图?当我使用具有android的动画时,我得到这种行为:fillEnabled =“true”android:fillAfter =“true” 不理解它,似乎是一个错误 - 如果我使用没有fillEnabled / fillAfter的动画,一切都按预期工作......
答案 1 :(得分:98)
如果在某个动画后设置setVisibility(View.GONE)
(例如淡出),请尝试使用clearAnimation()
清除动画。这对我有所帮助。
答案 2 :(得分:8)
尝试在setVisibility(View.GONE)之后使用setClickable(false)将clickable属性设置为false
答案 3 :(得分:5)
是的,mview.clearAnimation()
有一些问题,但amination.setFillAfter(false);
和mview.setClickable(false);
工作正常。
答案 4 :(得分:2)
我期望发生的是您使视图不可见,但视图中的子视图仍然会响应点击(即您的视图是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);
}
}
这对我来说过去很有用。我目前不知道更好的方法。
答案 5 :(得分:1)
我会将此作为评论发布,但不幸的是我无法发表评论。因为它可能是一个可能的解决方案,我这样发布:
当您编写“onClick”时,我假设您在XML布局中使用了onClick
属性。尝试使用OnClickListener
而不是setOnClickListener
属性设置onClick
。也许这会有所帮助......
答案 6 :(得分:1)
对于那些做出上述答案且仍然没有解决问题的人,我建议从父视图中删除视图。如果需要再次显示视图,只需复制并将其添加到父视图即可。
这可能看起来有点矫枉过正,但我隐藏/显示整个视图组,在你的情况下它可能是一个按钮,textview或图像,这个解决方案仍然有效。
答案 7 :(得分:0)
尝试在onAnimationEnd覆盖中添加.clearAnimation()。
答案 8 :(得分:0)
如果在视图中有动画,则应调用view.clearAnimation。