setEnabled(false)再次完成了什么?

时间:2018-01-29 03:50:54

标签: android

我在视图中有一个按钮,我偶尔会调用setEnabled()来禁用并重新启用它。工作得很好。

然后我为它的android:background元素创建了一个xml文件,以便将它调整起来,以及它被禁用时的预期外观退出。它现在总是看起来已启用,即使它不是。

我非常愿意并且能够创建一个<selector>,当它被禁用以获得预期的行为时会启动,但我不知道究竟是什么。我相信有一些文字颜色变化,但不确定是什么。

如果必须,我会将阿尔法降低到“明显禁用”的状态,但我想回到之前的股票行为。希望有人可以告诉我,当一个View被禁用时(事件处理除外),究竟会发生什么?

这是<layer-list>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/gold"
        android:gravity="fill" />
    <item>
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="#000000" />
        </shape>
    </item>
</layer-list>

我想知道当上面的代码片段不存在时,android对禁用按钮的作用。即,在禁用时默认恢复原始的Android行为。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false">
???????
    </item>

2 个答案:

答案 0 :(得分:0)

您可以尝试使用以下代码:

selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:drawable="@drawable/btn_disable" android:state_enabled="false"/>
        <item android:drawable="@drawable/btn_enabled" android:state_enabled="true"/>

    </selector>

将选择器放在按钮的背景中:

<Button
         android:id="@+id/button1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:background="@drawable/selector" />

答案 1 :(得分:0)

这是一种方法。 每当您启用按钮时,您都可以添加

button.setEnabled(true);
button.setBackground(getDrawable(R.drawable.backgroundofbuttonwhenenabled));

每当您禁用该按钮时,您都可以添加

button.setEnabled(false);
button.setBackground(getDrawable(R.drawable.backgroundofbuttonwhendisabled));