更改android中禁用按钮的颜色

时间:2015-10-11 23:57:34

标签: android button android-drawable

有没有办法通过样式或其他形式更改android中禁用按钮的颜色?

我目前有以下内容,

抽拉/ button_default.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_default_shape"/>
</selector>

抽拉/ button_default_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <solid android:color="@color/button_default_background"/>
    <corners android:radius="3dp"/>
</shape>

值/ styles.xml

<style name="AppTheme.Button">
    <item name="android:background">@drawable/button_default</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:paddingTop">10dp</item>
    <item name="android:paddingBottom">10dp</item>
    <item name="android:focusable">true</item>
    <item name="android:clickable">true</item>
    <item name="android:gravity">center</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">17sp</item>
    <item name="android:textAppearance">@style/CustomFontAppearance</item>
</style>

6 个答案:

答案 0 :(得分:16)

您必须在这些状态下为不同的drawable使用选择器。

你可以像这样创建一个选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/your_enabled_drawable" android:state_enabled="true" />
    <item android:drawable="@drawable/your_disabled_drawable" android:state_enabled="false" />
    <!-- default state-->
    <item android:drawable="@drawable/your_enabled_drawable" />
</selector>

答案 1 :(得分:4)

试试这个 -

drawable / bg_button.xml: -

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/bg_button_focused" android:state_selected="true"/>
    <item android:drawable="@drawable/bg_button_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_button_disabled" android:state_enabled="false" />
    <item android:drawable="@drawable/bg_button_normal"/>

</selector>

在此之后,只需在按钮上设置背景 -

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_button"
    android:text="Button"/>

答案 2 :(得分:4)

为android指定选择器中的颜色:state_enabled =&#34; false&#34;作为可绘制的

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false">
        <shape>
            <solid android:color="#32ff09" />
        </shape>
    </item>
</selector>

将此可绘制资源应用于按钮背景

 <Button
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/drawble_name"
    android:enabled="false"
    android:text="Selector Applied Button" />

答案 3 :(得分:1)

更新:对于Android MaterialButton

对于Android MaterialButton,有两种解决方案,一种针对SDK> = v21,另一种针对SDK

在这里,我还将介绍如何根据按钮的启用或禁用来更改按钮的文本颜色。

首先在.xml文件夹中创建两个颜色选择器color文件。一个用于按钮颜色,另一个用于按钮文本颜色。例如,按钮颜色为button_state_colors.xml,文本颜色为button_text_state_colors.xml

以下是这两个颜色文件:

  1. button_state_colors.xml

     <?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
         <item android:state_enabled="true" android:color="#303F9F" />
         <item android:state_enabled="false" android:color="#BBBBBB" />
     </selector>
    
  2. button_text_state_colors.xml

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

现在,对于所有版本的Android SDK,您都可以使用以下样式更改按钮及其文本的颜色:

style.xml中:

<style name="Widget.AppTheme.MaterialButton" parent="Widget.MaterialComponents.Button">
    <item name="backgroundTint">@color/button_state_colors</item>
    <item name="android:textColor">@color/button_text_state_colors</item>
</style>

layout.xml中:

<com.google.android.material.button.MaterialButton
    android:id="@+id/button"
    style="@style/Widget.AppTheme.MaterialButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

仅对于SDK> = 21,您无需使用style就可以直接更改按钮颜色,例如:

<com.google.android.material.button.MaterialButton
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/button_state_colors"/>

答案 4 :(得分:0)

这是我的代码,可以与按钮启用和禁用状态一起正常工作。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="true" android:drawable="@drawable/ic_button_gradient"/>
   <item android:state_enabled="false" android:drawable="@color/gray"/>
</selector>

答案 5 :(得分:0)

另一种实现此目的的方法是创建一个颜色选择器

创建文件

res/color/your_color.xml

看起来像

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorDisabledBackground" android:state_enabled="false" />
    <item android:color="@color/colorEnabledBackground" />
</selector>

然后您可以将其用作常规颜色

样式:

<style name="YourStyle">
     <item name="android:background">@color/your_color</item>
     <item name="android:textColor">@android:color/black</item>
</style>

在布局,形状或代码等方面也是如此。