可绘制的资源和文本颜色

时间:2012-10-09 19:11:46

标签: android styles

我正在使用drawables来很好地设置我的按钮样式,除了按钮中的文本颜色外,它工作正常。

我在state_enabled="false"中定义了一个selector项,并使用setEnabled为我提供了正确的按钮样式,但是我必须通过相当多的循环才能获得不同的文本颜色。例如,此代码不起作用(禁用时显示无或黑色文本,启用时显示黑色):

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);

}

3 个答案:

答案 0 :(得分:2)

我找到了解决方案。

关键在于将TextColor设置为selector中的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()即可让一切正常。

答案 1 :(得分:1)

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

答案 2 :(得分: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会执行此操作为了你。选择器将汇总到颜色资源中,但实际生成的类称为ColorStateList,以防您在其他文档中找到它。