如何为按钮在启用、禁用、浅色模式和深色模式下设置自定义颜色
我在定义能覆盖所有所需状态的自定义按钮颜色时遇到困难:启用/禁用、明暗主题、文本和背景颜色。
对于文本和背景在启用与禁用状态下的颜色,我已经定义了两个文件:
drawable/btn_text.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@color/buttonText"/>
<item android:state_enabled="false" android:drawable="@color/buttonTextDisabled"/>
</selector>
drawable/btn_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@color/buttonBackground"/>
<item android:state_enabled="false" android:drawable="@color/buttonBackgroundDisabled"/>
</selector>
为了支持明暗主题:
values/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
...
<color name="buttonBackground">#A9C9FC</color><!-- light blue -->
<color name="buttonText">#2C3E50</color><!-- dark blue -->
<color name="buttonBackgroundDisabled">#C5C4C4</color><!-- light gray -->
<color name="buttonTextDisabled">#525151</color><!-- dark gray -->
...
</resources>
values-night/colors.xml:
<resources>
...
<color name="buttonBackground">#2C3E50</color><!-- dark blue -->
<color name="buttonText">#A9C9FC</color><!-- light blue -->
<color name="buttonBackgroundDisabled">#525151</color><!-- dark gray -->
<color name="buttonTextDisabled">#C5C4C4</color><!-- light gray -->
...
</resources>
style.xml:
<style name="myButton" parent="Widget.Material3.Button.OutlinedButton">
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@drawable/btn_text</item>
<item name="android:backgroundTint">@drawable/btn_bg</item>
</style>
在布局中的按钮定义:
<com.google.android.material.button.MaterialButton
style="@style/myButton"
...
我没有看到预期的颜色。按钮总是显示为实色的 ?fuchsia。我到底哪里弄错了?
解决方案
我发现自己把drawable状态文件定义错了。我当时混淆了,把颜色规格写成 drawable 而不是 color。它们应该是,例如:
drawable/btn_text.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="@color/buttonText"/>
<item android:state_enabled="false" android:color="@color/buttonTextDisabled"/>
</selector>
有了这个,就能正常工作了。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。