2014-02-21 13 views
14

У меня есть селектор для textColor в виде RadioButton, как это:Android RadioButton TextColor селектор

<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"), даже тот, который выбран.

Что я делаю неправильно?

ответ

35

Похоже, вы используете неправильные селекторы. Документы описывают выбор следующим образом:

При каждом изменении состояния, состояния список проходится сверху вниз и первым элемент, который соответствует используется, текущее состояние выбора не на основе «лучший матч» а просто первый элемент, отвечающий минимальным критериям состояния.

Source link

Итак, по порядку:

  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> 

Я тестировал выше, и можно увидеть все цвета выражены соответствующим образом.

+0

Установка этого селектора в качестве фона для RadioButton будет работать?. Я не могу установить фон RadioButton. –

+0

Да, установив это, поскольку ваш фон должен работать. Если это указано в «drawable/radiobutton_background.xml», вы можете добавить его следующим образом: «android: background =» @ drawable/radiobutton_background ». –

+0

Правильно ли это (android: color =" # 0f0 ")? –

1
<?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". Это не сработало. Но когда я изменил его, он сделал это.

4

Ответ, предоставленный @GrantAmos, является совершенным и работает. Если вы хотите использовать селектор текста через XML, используйте этот код.

android:textColor="@color/textview_selector"

Однако, если вы хотите установить селектор программно, используйте этот код -

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

Надеется, что это будет спасти чье-то время.

4

Согласно Android. https://developer.android.com/guide/topics/resources/color-list-resource.html. https://developer.android.com/reference/android/content/res/ColorStateList.html

Вы должны создать папку под названием «цвет» в каталоге «res» и создать, например, новый файл с именем 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" /> 

затем в вашей кнопке радио определяет в андроиде: 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" /> 
Смежные вопросы