Android RadioButton textColor选择器

Axa*_*dax 28 android radio-button

我有一个选择textColorRadioButton是这样的:

<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>
Run Code Online (Sandbox Code Playgroud)

我预计所选择的那个RadioButton将具有与其他颜色不同的颜色.

但是,所有RadioButtons都有蓝色文本(使用android:state_focused ="false"android:state_pressed ="false"),甚至是所选的.

我究竟做错了什么?

Gra*_*mos 57

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

在每次状态更改期间,状态列表从上到下遍历,并且使用与当前状态匹配的第一个项目 - 选择不基于"最佳匹配",而只是满足州的最低标准的第一个项目.

来源链接

所以,按顺序:

  1. state_selected永远不会为真,因为RadioButtons在选中时使用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>
Run Code Online (Sandbox Code Playgroud)

我测试了上面的内容,可以看到所有颜色都被恰当地表达出来.


Isa*_*era 15

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

你必须在'res'目录中创建一个名为'color'的文件夹,并创建一个名为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>
Run Code Online (Sandbox Code Playgroud)

然后在你的单选按钮中在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" />
Run Code Online (Sandbox Code Playgroud)


Roh*_*wal 10

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

android:textColor="@color/textview_selector"

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

radioButton.setTextColor(ContextCompat.getColorStateList(getContext(), R.color.textview_selector));
Run Code Online (Sandbox Code Playgroud)

希望它能节省一些人的时间.