如何在选择器中设置按钮的文本样式?

26

按钮选择器允许为每个按钮状态定义背景,但如何为每个状态定义按钮文本样式?我的目标是在禁用时将按钮变灰。因此,我为按钮的禁用状态设置了一个灰色背景,但我发现唯一的方法也是在禁用按钮时动态更改其颜色来使文本变灰...

有人可以帮忙吗?

谢谢

<style name="srp_button" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/btn_default</item>
    <item name="android:textColor">#ffffff</item> <!-- How to specify different color for different state? -->
    <!-- more stuff -->
</style>

drawable/btn_default.xml

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

    <item android:state_enabled="true"><shape>
            <solid android:color="@color/pink" />
            <corners android:radius="6dp" />
        </shape></item>
    <item><shape>
            <solid android:color="#000000" />
            <corners android:radius="6dp" />
        </shape></item>

</selector>

请放上你尝试过的代码... - V.J.
你是否知道如何在不出现任何编译错误的情况下编译<item name="android:background">@drawable/btn_default</item>?我遇到了“无法找到与值'@drawable/btn_default'匹配的资源文件'android:background'”的问题。 - macio.Jun
1个回答

44

好的!

你可以像定义Button的背景一样,定义所有4种状态下的文本颜色。例如:

文件名:/res/color/text_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#440000"/>
    <item android:state_focused="true" android:color="#004400"/>
    <item android:state_pressed="true" android:color="#000044"/>
    <item android:color="#444"/> 
</selector>

将这个文件添加到您的 Button 样式中,如下所示:

<style name="srp_button" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/btn_default</item>
    <item name="android:textColor">@color/text_color</item> <!-- Here is specified text color -->
</style>

1
哇,太酷了!选择器项中的“android:color”属性是未记录的!但它确实有效! - Lcsky
1
这是相关文档的链接: http://developer.android.com/guide/topics/resources/color-list-resource.html - AdrianoCelentano
非常感谢您提到textColor,特别是跟在它旁边的注释(!-- 这里指定文本颜色 -->)。我不知道你可以同时使用普通颜色选择器(带android:color属性)来设置textColor和自定义背景以及自定义textColor。我刚刚花了半个小时在互联网上搜索如何在有自定义背景(我有一个涟漪背景)的情况下使用禁用状态的文本颜色,除了这个之外我什么都没找到!谢谢! - Javad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接