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

Что я делаю не так?

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

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

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

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

  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> 

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

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

android:textColor="@color/textview_selector"

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

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

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

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