sirve - radiobutton android checked
Android RadioButton textColor selector (5)
La respuesta proporcionada por @GrantAmos es perfecta y funciona. Si desea enviar un selector de color de texto a través de XML, utilice este código.
android:textColor="@color/textview_selector"
Sin embargo, si desea configurar el selector mediante programación, utilice este código:
radioButton.setTextColor(ContextCompat.getColorStateList(getContext(), R.color.textview_selector));
Espero que le ahorre el tiempo a alguien.
Tengo un selector para textColor
de un RadioButton
como este:
<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>
Esperaba que el RadioButton
seleccionado tuviera un color diferente al de los otros.
Sin embargo, todos los RadioButton
s tienen texto azul (usando android: state_focused = "false" android: state_pressed = "false"), incluso el que está seleccionado.
¿Qué estoy haciendo mal?
Parece que estás usando los selectores equivocados. Los documentos describen la selección de la siguiente manera:
Durante cada cambio de estado, la lista de estados se recorre de arriba a abajo y se utiliza el primer elemento que coincide con el estado actual; la selección no se basa en la "mejor coincidencia", sino en el primer elemento que cumple los criterios mínimos del estado. .
Entonces, en orden:
- state_selected nunca es verdadero ya que RadioButtons usa state_checked cuando está marcado.
- state_focused nunca se llama porque RadioButton nunca recibirá el foco de entrada.
- state_pressed debería estar funcionando. Cuando mantienes el dedo hacia abajo, ¿no ves que el texto aparece en verde?
- state_focused false y state_pressed false terminan siendo predeterminados para que veas azul.
Si desea ver diferentes estados, pruebe estos:
<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>
He probado lo anterior y puedo ver todos los colores expresados adecuadamente.
Según Android. https://developer.android.com/guide/topics/resources/color-list-resource.html . https://developer.android.com/reference/android/content/res/ColorStateList.html
Tienes que crear una carpeta llamada ''color'' en el directorio ''res'' y crear un nuevo archivo llamado radiobuttonstate.xml, por ejemplo, que tiene este aspecto.
<?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>
luego, en su botón de radio, defina en el atributo android: textColor su lista de colores que definió anteriormente.
<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" />
Use la propiedad marcada para el botón de radio.
<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>
<?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>
Esta funciona para mí. En realidad, cuando uso Android: color = "@ color / dark_grey". No funciono Pero cuando cambié a dibujable lo hizo.