Android: 不可见的对象仍然可以点击
Android: Invisible objects still clickable
我有一个 activity,其中的按钮和图像可以根据用户交互出现和消失。
我发现后面的对象(已设置为不可见)仍然会触发点击,某种程度上。它们不会处理与被点击相关的代码,但它们会暂时重新出现,然后在被点击时立即再次消失。
它们似乎也在某种程度上干扰了放置在它们顶部的按钮。当它们后面有一个不可见的物体时,这些按钮有时会变得非常笨拙且难以点击。
我正在简单地使用:
object.setVisibility(View.VISIBLE);
并且:
object.setVisibility(View.INVISIBLE);
让我的物品出现和消失。这不是我应该做的吗?
编辑:
人们一直要求我提供与他们给我的完全相同的代码。这是我得到的代码,我目前正在使用。
btnLifePlus5.setVisibility(View.GONE);
btnLifePlus5.setFocusableInTouchMode(false);
txtLifePlus5.setVisibility(View.GONE);
txtLifePlus5.setFocusableInTouchMode(false);
btnLifePlus1.setVisibility(View.GONE);
btnLifePlus1.setFocusableInTouchMode(false);
txtLifePlus1.setVisibility(View.GONE);
txtLifePlus1.setFocusableInTouchMode(false);
btnLifeMinus5.setVisibility(View.GONE);
btnLifeMinus5.setFocusableInTouchMode(false);
txtLifeMinus5.setVisibility(View.GONE);
txtLifeMinus5.setFocusableInTouchMode(false);
btnLifeMinus1.setVisibility(View.GONE);
btnLifeMinus1.setFocusableInTouchMode(false);
txtLifeMinus1.setVisibility(View.GONE);
txtLifeMinus1.setFocusableInTouchMode(false);
这与将它们设置为不可见没有区别。
使任何 View
不可见不会阻止我们触发他们的听众。只是你看不到它,其他的一切都和它是可见的一样。
如果您根本不想使用它,请将其更改为 View.GONE
View.INVISIBLE
和 View.GONE
的区别:不可见对象继续使用分配给它的 space,而对象设置为 [=13] =] 会离开 space 的 space 就好像它不在屏幕上一样。
使用
object.setVisibility(View.GONE);
而不是
object.setVisibility(View.INVISIBLE);
使用object.setVisibility(View.GONE);
代替object.setVisibility(View.INVISIBLE);
View.GONE 意味着这个视图是不可见的,它不需要任何 space 用于布局目的。
View.GONE This view is invisible, and it doesn't take any space for
layout purposes.
View.INVISIBLE This view is invisible, but it still takes up space for
layout purposes.
希望对您有所帮助。
尝试object.setVisibility(View.GONE)
View.GONE
阻止视图绘制其布局边界(宽度和高度),而 View.INVISIBLE
绘制它。
你应该使用:
object.setVisibility(View.GONE);
View.GONE
将您的视图从布局中完全移除,但 View.INVISIBLE
只会使您的视图不可见,但仍可在布局中找到,因此可点击。
尝试:
object.setClickable(false);
或者,您可以:
object.setEnabled(false);
我设法解决这个荒谬问题的唯一方法是在 activity 中的对象之间创建一种视图面板。此视图面板为屏幕大小,使用相同颜色的背景,并且开始时不可见。
通常,我让对象A消失,让对象B出现。当我点击之前被对象 A 占据的 space 时,它瞬间闪回到屏幕上,然后又消失了。它看起来很糟糕。在下次我使对象 A 消失之前,后续点击不会重现此错误。
解决方法是使对象 A 消失,使新视图面板在其上方可见,然后使对象 B 出现在视图面板上方。因此,面板充当隐藏对象和用户交互之间的一种屏障。用户甚至不知道这个视图面板的存在,因为它融入了标准背景,但是当我现在单击对象 A 所在的 space 时,它现在不再瞬间闪回到屏幕上。虽然这是一个不得不使用的糟糕解决方案,但这个 OS 有问题,我别无选择。
我的 activity 现在看起来非常稳定并且运行良好。我不喜欢它,但它有效。
非常感谢,google。
就我而言,我正在为布局设置动画,然后将其设置为隐藏。
但是,我使用的是 View.GONE,但布局视图仍在点击。
然后我发现在动画中我使用的是anim.setFillAfter = true
changing it to "False" fixed the clicks issue for me.
希望对敲头的人有所帮助。
我有一个 activity,其中的按钮和图像可以根据用户交互出现和消失。
我发现后面的对象(已设置为不可见)仍然会触发点击,某种程度上。它们不会处理与被点击相关的代码,但它们会暂时重新出现,然后在被点击时立即再次消失。
它们似乎也在某种程度上干扰了放置在它们顶部的按钮。当它们后面有一个不可见的物体时,这些按钮有时会变得非常笨拙且难以点击。
我正在简单地使用:
object.setVisibility(View.VISIBLE);
并且:
object.setVisibility(View.INVISIBLE);
让我的物品出现和消失。这不是我应该做的吗?
编辑:
人们一直要求我提供与他们给我的完全相同的代码。这是我得到的代码,我目前正在使用。
btnLifePlus5.setVisibility(View.GONE);
btnLifePlus5.setFocusableInTouchMode(false);
txtLifePlus5.setVisibility(View.GONE);
txtLifePlus5.setFocusableInTouchMode(false);
btnLifePlus1.setVisibility(View.GONE);
btnLifePlus1.setFocusableInTouchMode(false);
txtLifePlus1.setVisibility(View.GONE);
txtLifePlus1.setFocusableInTouchMode(false);
btnLifeMinus5.setVisibility(View.GONE);
btnLifeMinus5.setFocusableInTouchMode(false);
txtLifeMinus5.setVisibility(View.GONE);
txtLifeMinus5.setFocusableInTouchMode(false);
btnLifeMinus1.setVisibility(View.GONE);
btnLifeMinus1.setFocusableInTouchMode(false);
txtLifeMinus1.setVisibility(View.GONE);
txtLifeMinus1.setFocusableInTouchMode(false);
这与将它们设置为不可见没有区别。
使任何 View
不可见不会阻止我们触发他们的听众。只是你看不到它,其他的一切都和它是可见的一样。
如果您根本不想使用它,请将其更改为 View.GONE
View.INVISIBLE
和 View.GONE
的区别:不可见对象继续使用分配给它的 space,而对象设置为 [=13] =] 会离开 space 的 space 就好像它不在屏幕上一样。
使用
object.setVisibility(View.GONE);
而不是
object.setVisibility(View.INVISIBLE);
使用object.setVisibility(View.GONE);
代替object.setVisibility(View.INVISIBLE);
View.GONE 意味着这个视图是不可见的,它不需要任何 space 用于布局目的。
View.GONE This view is invisible, and it doesn't take any space for layout purposes.
View.INVISIBLE This view is invisible, but it still takes up space for layout purposes.
希望对您有所帮助。
尝试object.setVisibility(View.GONE)
View.GONE
阻止视图绘制其布局边界(宽度和高度),而 View.INVISIBLE
绘制它。
你应该使用:
object.setVisibility(View.GONE);
View.GONE
将您的视图从布局中完全移除,但 View.INVISIBLE
只会使您的视图不可见,但仍可在布局中找到,因此可点击。
尝试:
object.setClickable(false);
或者,您可以:
object.setEnabled(false);
我设法解决这个荒谬问题的唯一方法是在 activity 中的对象之间创建一种视图面板。此视图面板为屏幕大小,使用相同颜色的背景,并且开始时不可见。
通常,我让对象A消失,让对象B出现。当我点击之前被对象 A 占据的 space 时,它瞬间闪回到屏幕上,然后又消失了。它看起来很糟糕。在下次我使对象 A 消失之前,后续点击不会重现此错误。
解决方法是使对象 A 消失,使新视图面板在其上方可见,然后使对象 B 出现在视图面板上方。因此,面板充当隐藏对象和用户交互之间的一种屏障。用户甚至不知道这个视图面板的存在,因为它融入了标准背景,但是当我现在单击对象 A 所在的 space 时,它现在不再瞬间闪回到屏幕上。虽然这是一个不得不使用的糟糕解决方案,但这个 OS 有问题,我别无选择。
我的 activity 现在看起来非常稳定并且运行良好。我不喜欢它,但它有效。
非常感谢,google。
就我而言,我正在为布局设置动画,然后将其设置为隐藏。
但是,我使用的是 View.GONE,但布局视图仍在点击。
然后我发现在动画中我使用的是anim.setFillAfter = true
changing it to "False" fixed the clicks issue for me.
希望对敲头的人有所帮助。