安卓单选按钮文本颜色选择器

38

我有一个针对RadioButtontextColor选择器,就像这样:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#fff"/>
    <item android:state_focused="true" android:color="#f00"/>
    <item android:state_pressed="true" android:color="#0f0"/>
    <item android:state_focused="false" android:state_pressed="false" android:color="#00f"/>
</selector>

我原本期望被选中的RadioButton会与其他的不同颜色。

可是,所有的RadioButton都是蓝色的(使用android:state_focused="false" android:state_pressed="false"),包括选中的那一个。

我做错了什么?

5个回答

76

看起来您只是使用了错误的选择器。文档描述了如下选择:

在每个状态更改期间,状态列表从上到下遍历,并使用与当前状态匹配的第一个项目——选择不基于“最佳匹配”,而仅基于满足状态的最小标准的第一个项目。

源链接

所以按顺序:

  1. 当选中时,state_selected 永远不会为 true,因为 RadioButton 使用 state_checked。
  2. state_focused 永远不会被调用,因为 RadioButton 永远不会接收输入焦点。
  3. state_pressed 应该可以工作。当您按住手指时,您看不到文本变为绿色吗?
  4. state_focused false 和 state_pressed false 最终变成默认值,所以您会看到蓝色。

如果您想要查看不同的状态,请尝试以下内容:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#0f0"/>
    <item android:state_checked="true" android:color="#fff"/>
    <item android:color="#00f"/>
</selector>

我已经测试过上述内容,并且可以看到所有颜色都被适当地表达出来。


将此选择器设置为RadioButton的背景,它会起作用吗?我无法将其设置为RadioButton的背景。 - Ramesh_D
是的,将其设置为您的背景应该可以工作。如果上述内容在“drawable/radiobutton_background.xml”中,则应按如下方式添加它:“android:background="@drawable/radiobutton_background"”。 - Grant Amos
@Ramesh_D 是的。#778899 也可以是 #789。当渲染时,这些值只需要双倍的空间。 - sud007

31
根据Android文档,你需要在'res'目录下创建一个名为'color'的文件夹,并创建一个名为radiobuttonstate.xml的新文件,内容如下: https://developer.android.com/guide/topics/resources/color-list-resource.htmlhttps://developer.android.com/reference/android/content/res/ColorStateList.html
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true"
    android:color="YOUR COLOR" />

   <item
    android:state_pressed="true"
    android:state_enabled="false"
    android:color="YOUR COLOR" />

    <item android:color="YOUR COLOR"
    android:state_checked="true"/>

    <item
    android:state_enabled="false"
    android:color="YOUR COLOR" />

   <item android:color="YOUR COLOR" />
</selector>

然后,在你的单选按钮中,定义android:textColor属性为之前定义的颜色列表。

  <RadioButton
                    android:id="@+id/radio_H"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:text="@string/string_example"
                    android:textColor="@color/radiobuttonstate"
                    android:textAlignment="center" />

15

@GrantAmos提供的答案完美且可行。 如果您想通过XML设置文本颜色选择器,请使用此代码。

android:textColor="@color/textview_selector"

但是,如果您想以编程方式设置选择器,请使用此代码-

radioButton.setTextColor(ContextCompat.getColorStateList(getContext(), R.color.textview_selector));

希望它能够节省某人的时间。


4
    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@color/dark_grey"/>
    <item android:state_checked="true" android:drawable="@color/topic_green"/>
</selector>

这个对我有用。实际上,当我使用android:color="@color/dark_grey"时它没有起作用。但是当我改成drawable时就可以了。

-1
<style name="MyRadioButton" parent="Theme.AppCompat.Light">
    <item name="colorControlNormal">@color/lbl_login</item>
    <item name="colorControlActivated">@color/btn_login_back_color</item>
</style>

 <RadioButton
        android:id="@+id/btn_radio_credit_card"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/_8sdp"
        android:fontFamily="@font/poppins_regular"
        android:paddingStart="@dimen/_14ssp"
        android:paddingEnd="@dimen/_1sdp"
        android:text="Credit Card"
        android:textColor="@color/lbl_login"
        android:textSize="@dimen/_14ssp"
        android:theme="@style/MyRadioButton" />

参考资料


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