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
при проверке.
- 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>