更改 android 中禁用按钮的颜色
Change the color of a disabled button in android
有没有办法通过样式或其他形式更改 android 中禁用按钮的颜色?
我目前有以下,
drawable/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>
drawable/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>
values/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>
您必须为这些状态下的不同可绘制对象使用选择器。
您可以像这样创建一个选择器:
<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>
试试这个 -
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"/>
将 android:state_enabled="false" 的选择器中的颜色指定为可绘制
<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" />
这是我的代码,可以在按钮启用和禁用状态下正常工作。
<?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>
实现此目的的另一种方法是创建一个颜色选择器。
创建文件
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>
在布局、形状或代码等方面也是如此
更新:对于 Android MaterialButton
对于Android MaterialButton
有两种解决方案,一种用于SDK >= v21,另一种用于SDK < v21。
这里我也给出了如何改变按钮的文本颜色,具体取决于它是启用还是禁用。
首先在您的 color
文件夹中创建两个颜色选择器 .xml
文件。一个用于按钮颜色,另一个用于按钮文本颜色。例如 button_state_colors.xml
按钮颜色和 button_text_state_colors.xml
文本颜色。
这是这两个颜色文件:
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>
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"/>
有没有办法通过样式或其他形式更改 android 中禁用按钮的颜色?
我目前有以下,
drawable/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>
drawable/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>
values/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>
您必须为这些状态下的不同可绘制对象使用选择器。
您可以像这样创建一个选择器:
<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>
试试这个 -
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"/>
将 android:state_enabled="false" 的选择器中的颜色指定为可绘制
<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" />
这是我的代码,可以在按钮启用和禁用状态下正常工作。
<?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>
实现此目的的另一种方法是创建一个颜色选择器。
创建文件
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>
在布局、形状或代码等方面也是如此
更新:对于 Android MaterialButton
对于Android MaterialButton
有两种解决方案,一种用于SDK >= v21,另一种用于SDK < v21。
这里我也给出了如何改变按钮的文本颜色,具体取决于它是启用还是禁用。
首先在您的 color
文件夹中创建两个颜色选择器 .xml
文件。一个用于按钮颜色,另一个用于按钮文本颜色。例如 button_state_colors.xml
按钮颜色和 button_text_state_colors.xml
文本颜色。
这是这两个颜色文件:
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>
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"/>