Подтвердить что ты не робот

Android RadioButton textColor селектор

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

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

4b9b3361

Ответ 1

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

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

Ссылка источника

Итак, в порядке:

  • state_selected никогда не является истинным, так как RadioButtons использует state_checked при проверке.
  • state_focused никогда не вызывается, потому что RadioButton никогда не будет получать фокус ввода.
  • state_pressed должен работать. Когда вы держите палец вниз, вы не видите текст, появляющийся зеленый?
  • 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>

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

Ответ 2

По данным Android. https://developer.android.com/guide/topics/resources/color-list-resource.html. https://developer.android.com/reference/android/content/res/ColorStateList.html

Вы должны создать папку с именем 'color' в каталоге '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" />

Затем в вашем переключателе укажите в атрибуте 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" />

Ответ 3

Ответ, предоставленный @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". Это не сработало. Но когда я изменил его, он сделал это.

Ответ 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>