安卓按钮文本颜色始终为粉色

6

我试图在按钮在选中状态和非选中状态之间切换时更改按钮文本颜色和按钮背景颜色。背景完美地工作,但文本只显示为粉色(默认的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>

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>

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>

此外,文本颜色从未改变,它始终保持为粉色。我尝试添加<item android:color="@color:/colorPrimary"/>作为默认值,但仍然无效。
你有什么想法是什么原因导致这种情况?
1个回答

12

你有一些问题。

首先,你的<item>元素应该直接拥有 android:color 属性,而不是在一个子节点 <color> 元素中。

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

你把 map_button_text 资源放在了 res/drawable 文件夹中,这会告诉安卓把它解释为 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>

Bryan的回答非常棒,我之前遇到一些问题,花了几个小时才发现原因是因为所在目录不同。它应该在res/color而不是res/drawable中。 - Uilque Messias

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