Android RadioButton textColor选择器

时间:2014-02-21 21:04:36

标签: android radio-button

我有一个textColor RadioButton的选择器,如下所示:

<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”),甚至是所选的。

我做错了什么?

6 个答案:

答案 0 :(得分:51)

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

  

在每次状态更改期间,状态列表从上到下遍历,并且使用与当前状态匹配的第一个项目 - 选择不基于“最佳匹配”,而只是满足最低条件的第一个项目国家。

Source link

所以,按顺序:

  1. state_selected永远不会,因为RadioButtons使用state_checked 检查时。
  2. 因为RadioButton,因此永远不会调用state_focused 将永远不会收到输入焦点。
  3. state_pressed应该正常工作。 当您用手指按住时,您看不到文字出现 绿色?
  4. state_focused false和state_pressed false结束 默认,所以你看到蓝色。
  5. 如果您想查看不同的状态,请尝试以下操作:

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

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

答案 1 :(得分:12)

根据Android。 https://developer.android.com/guide/topics/resources/color-list-resource.htmlhttps://developer.android.com/reference/android/content/res/ColorStateList.html

您必须创建一个名为&#39; color&#39;的文件夹。在&#39; res&#39;目录并创建一个名为radiobuttonstate.xml的新文件,例如它看起来像这样。

 <?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" />

答案 2 :(得分:9)

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

android:textColor="@color/textview_selector"

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

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

希望能节省一些人的时间。

答案 3 :(得分: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 =&#34; @ color / dark_grey&#34;。它没有用。但是当我改变为可绘制时它确实如此。

答案 4 :(得分:0)

将选中的属性用于单选按钮。

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

答案 5 :(得分:0)

<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" />

Refrence