Android:隐形对象仍然可以点击

Bis*_*ret 12 android invisible

我有一个活动,其中包含可以根据用户交互显示和消失的按钮和图像.

我发现后面的物体已被设置为不可见,仍然会触发点击.他们没有处理与被点击相关的代码,但是它们会暂时重新出现,然后在点击时立即再次消失.

它们似乎也在某种程度上干扰了它们顶部的按钮.当这些按钮背后有一个看不见的物体时,它们会变得非常繁琐且有时难以点击.

我简单地使用:

object.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)

和:

object.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)

使我的项目显示和消失.这不是我应该做的吗?

编辑:

人们一直在问我他们给我的完全相同的代码.这是我给出的代码,也是我目前使用的代码.

        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);
Run Code Online (Sandbox Code Playgroud)

这对于将它们设置为不可见没有区别.

Roh*_*5k2 18

使任何View看不见都不会阻止我们触发他们的听众.它只是你看不到它的每一件事都会像看得见一样.

如果您根本不想使用它,请将其更改为 View.GONE

差异在View.INVISIBLEView.GONE:不可见对象继续利用分配给它的空间,而对象设置为View.GONE会留下空间空间,就好像它不在屏幕上一样.

使用

object.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

而不是

object.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)


Int*_*iya 6

object.setVisibility(View.GONE);改用object.setVisibility(View.INVISIBLE);

View.GONE表示此视图不可见,并且不需要任何空间用于布局.

View.GONE此视图不可见,并且不需要任何空间用于布局.

View.INVISIBLE此视图不可见,但它仍占用布局空间.

我希望它会对你有所帮助.

  • 谢谢您的答复。我在活动中用“GONE”替换了“INVISIBLE”的所有实例。我重新启动了该应用程序并再次进行了测试。存在相同的行为。没有发生任何变化。当我单击已知存在 GONE 对象的空间时,它会立即在屏幕上闪回。 (2认同)

Fus*_*dor 5

尝试: object.setClickable(false); 作为替代方案,您可以: object.setEnabled(false);


Bis*_*ret 2

我设法解决这个荒谬问题的唯一方法是创建一种位于我的活动中的对象之间的视图面板。该视图面板与屏幕大小相同,使用相同颜色的背景,并且开始时不可见。

通常,我让对象 A 消失,让对象 B 出现。当我单击对象 A 先前占据的空间时,它会立即闪回到屏幕上,然后再次消失。看起来很糟糕。在我下次使对象 A 消失之前,后续的单击不会重现此错误。

解决方法是使对象 A 消失,使新视图面板在其顶部可见,然后使对象 B 出现在视图面板顶部。因此,面板充当隐藏对象和用户交互之间的某种屏障。用户甚至不知道这个视图面板存在,因为它融入了标准背景,但是当我现在单击对象 A 所在的空间时,它现在不再瞬间闪回到屏幕上。虽然这是一个必须使用的糟糕解决方案,但该操作系统存在缺陷,我别无选择。

我的活动现在看起来似乎非常稳定并且运行完美。我不喜欢它,但它有效。

非常感谢,谷歌。