Button.setEnabled(false)不会使按钮变成灰色

时间:2018-11-21 19:08:05

标签: android android-button

我的申请中有一个Button。当我在其上使用setEnabled(false)时,它变成灰色。但是,如果我先修改Button的背景,然后在其上调用setEnabled(false),它不会变成灰色(但是Button未启用)。为什么会这样,无论发生什么情况我怎么都可以将其变成灰色?

3 个答案:

答案 0 :(得分:1)

针对您的问题有两个决定: 最简单:更改按钮的背景。 或者您可以使用选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:color="#9e9e9e"
        />
    <item
        android:state_enabled="true"
        android:color="#56934d"
        />
</selector>

答案 1 :(得分:1)

我认为,最简单的解决方案是在活动中设置按钮的背景。如下所示:

button.setAlpha(.5f);
button.setClickable(false);

.5f alpha等效于灰色的禁用按钮。如果按钮的背景是图片,通常会很有用。

答案 2 :(得分:1)

  

那是为什么

通常,Button的背景是ColorStateList:将特定的颜色分配给不同的状态,例如“启用”或“禁用”(可能的状态取决于窗口小部件的类型)。如果状态发生变化,则运行时会相应地更改背景的颜色。

您提供了一种单色作为Button的背景,因此无论Button的当前状态如何,都将使用它。

  

无论发生什么情况如何将其设为灰色?

创建一个包含ColorStateList的可绘制资源(例如下面的guide)并将其用作背景可绘制对象。