Android 按钮文本颜色始终为粉红色
Android Button Text Color Always Pink
当按钮在选定状态和非选定状态之间切换时,我正在尝试更改按钮文本颜色和按钮背景颜色。背景效果完美,但文本仅显示为粉红色(默认 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"/>
作为默认值,但它仍然不起作用。
有什么原因造成的吗?
你有一些问题。
首先,您的 <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>
当按钮在选定状态和非选定状态之间切换时,我正在尝试更改按钮文本颜色和按钮背景颜色。背景效果完美,但文本仅显示为粉红色(默认 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"/>
作为默认值,但它仍然不起作用。
有什么原因造成的吗?
你有一些问题。
首先,您的 <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>