Android按钮文字颜色总是粉红色

Cod*_*ess 2 xml android state button

当按钮在选定状态和非选定状态之间切换时,我试图更改按钮文本颜色和按钮背景颜色.背景效果很好,但文本显示为粉红色(默认情况下colorPrimary,我已更改).

res/drawable/map_button_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="false">
        <shape android:shape="rectangle">
            <corners android:radius="4dp"/>
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>

    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <corners android:radius="4dp"/>
            <solid android:color="@color/colorPrimary"/>
        </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

res/drawable/map_button_text.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="false">
        <color android:color="@color/colorPrimary"/>
    </item>

    <item android:state_selected="true">
        <color android:color="@android:color/white"/>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

res/styles/styles.xml

<style name="Button.Map">
    <item name="android:layout_height">0dp</item>
    <item name="android:layout_weight">1</item>
    <item name="android:layout_margin">4dp</item>
    <item name="android:background">@drawable/map_button_background</item>
    <item name="android:textColor">@drawable/map_button_text</item>
</style>
Run Code Online (Sandbox Code Playgroud)

此外,文字颜色永远不会改变,它始终保持粉红色.我尝试添加<item android:color="@color:/colorPrimary"/>以用作默认值,但它仍然无法正常工作.

关于是什么导致它的任何想法?

Tan*_*.7x 8

你有一些问题.

首先,您的<item>元素应该android:color直接具有属性,而不是子<color>元素.

其次,android:textColor需要引用颜色资源(或文字颜色值).

您已将map_button_text资源放在res/drawable文件夹中,告诉Android将其解释为Drawable,而不是颜色.

如果您将该文件移动到res/color并通过它引用它,@color/map_button_text您应该得到您想要的.

最后,您还应该为选择器定义一个默认状态(一个没有任何android:state_属性).

您的最终XML应该看起来像这样:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorPrimary" android:state_selected="false"/>

    <!-- Default state -->
    <item android:color="@android:color/white"/>
</selector>
Run Code Online (Sandbox Code Playgroud)