1

drawables习惯于很好地设置按钮的样式,并且效果很好,除了按钮中的文本颜色。

我已经在 a 中定义了一个state_enabled="false"项目,selector并且 usingsetEnabled给了我正确的按钮样式,但是我必须跳过相当多的循环才能使文本颜色不同。例如,此代码不起作用(禁用时显示无文本或黑色文本,启用时显示深灰色):

public void setButtonsEnabled(boolean enable) {
    btnAccept.setEnabled(enable);
    btnDecline.setEnabled(enable);


    int color = R.color.White;
    if (!enable) {
        color = R.color.DarkGray;
    }
    btnAccept.setTextColor(color);
    btnDecline.setTextColor(color);

}
4

3 回答 3

4

我找到了解决方案。

关键在于还将 TextColor 设置为 a selectorin res/colors

   android:textColor="@color/button_text"
   android:background="@drawable/button_selector" 

对于背景选择器,我使用了这个:

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

textColor 选择器是这样的:

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

简单地调用setEnabled()将使一切正常。

于 2012-10-09T19:37:53.807 回答
1

您使用了错误的颜色值。R.color.White 返回值的资源 ID,而不是值本身。尝试 Color.WHITE 或 getResources().getColor(R.color.White)

于 2012-10-09T19:25:33.893 回答
0

你检查了ColorStateLists吗?他们非常棒。所以基本上将所有这些Drawable选择器的想法应用于一组颜色。

创建一个名为[Your Project]/res/colors/的文件夹,然后在其中放置一个名为 button_color.xml(或其他任何内容)的 xml 文件。

button_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
>
    <!-- Any Enabled button, gets White Text -->
    <item
        android:color="@color/White"
        android:state_enabled="true" />

    <!-- Buttons with any other state, get DarkGray Text -->
    <item
        android:color="@color/DarkGray"/>
</selector>

然后对于你的TextView,你可以做类似的事情,mTextView.setTextColor(R.color.button_color);那时不需要那种 if/else 类型的逻辑,selector它会为你做。选择器被汇总到颜色资源中,但它实际生成的类称为 aColorStateList以防您发现它在其他文档中引用。

于 2012-10-09T19:35:59.520 回答