setEnabled()vs setClickable(),有什么区别?

时间:2013-03-25 13:11:35

标签: android android-button clickable

到现在为止,当我想阻止用户按下按钮时,我会设置button.setClickable(false);并通常将文本更改为某种灰色(让用户知道按钮被禁用) 。今天我偶然发现了setEnabled()财产。

所以我去了文档,看看下面方法的解释:

setEnabled(boolean enabled)
   Set the enabled state of this view.

这甚至意味着什么?启用状态/可点击状态和禁用状态/不可点击状态之间有什么区别?有人可以解释一下我之前做过什么,使用clickable属性和使用setEnabled()属性之间的区别?什么时候应该用?我搜索了Stack Overflow但找不到任何相关内容。

6 个答案:

答案 0 :(得分:73)

  

到底是什么意思?

引用the Wikipedia page for "GUI widget"

  

在应用程序的上下文中,可以在给定时间点启用或禁用窗口小部件。启用的窗口小部件具有响应事件的能力,例如击键或鼠标操作。无法响应此类事件的窗口小部件被视为已禁用。禁用窗口小部件的外观通常与启用的窗口小部件不同;禁用的小部件可以以较浅的颜色绘制,或者可以以某种方式在视觉上模糊。有关示例,请参见右图。

这个概念已存在了几十年,可以在大多数GUI框架中找到。

  

启用状态/可点击状态和禁用状态/不可点击状态之间的区别是什么?

在Android中,无法点击的窗口小部件不会响应点击事件。禁用的窗口小部件不仅不可单击,而且还可以直观地指示它已被禁用。

  

你是什么意思:“因为它使按钮在视觉上”禁用“?它如何在视觉上改变它?

使Button看起来像Button一样回复的原因是它的背景,即StateListDrawable。有一个特定的图像用于禁用状态。

答案 1 :(得分:4)

所以基本上,一个启用的false不会响应任何响应和在运行时设置的可点击的错误仍然响应并相信我,我只是尝试过它。

答案 2 :(得分:1)

视图还可以响应外部键盘,方向键盘(远程/游戏控制器)和辅助设备(switchscreen readers)。

答案 3 :(得分:0)

上面列出了区别,但有一个提示。在setOnClickListener()之后使用setClickable()。因此:

public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

答案 4 :(得分:0)

setClickable 公共无效setClickable(布尔型可点击)

它启用或禁用特定视图的单击事件。当一个视图可单击时,它将在每次单击时将其状态更改为“已按下”。如果视图的此属性被禁用,则不会更改其状态。

setEnabled public void setEnabled(启用了布尔值)

它设置了该视图的启用状态。如果将特定视图设置为启用,则在参数中传递true,否则传递false

答案 5 :(得分:0)

我在其他地方看不到的最大区别是视图重叠。具有clickable = true和enabled = false的视图将不允许您在其后按一个视图。但是带有clickable = false的视图将允许您在其后按一个视图。