android - sistema - Cambiar el color de un botón de radio
android sistema operativo (10)
Estoy desarrollando una aplicación basada en un cuestionario. Habrá 1 pregunta y 4 opciones (botones de radio). Si el usuario selecciona una respuesta incorrecta, quiero cambiar el color del botón de opción a Rojo. ¿Como hacer esto?
Crea una imagen como esta y colóquelo en sus carpetas dibujables ... llámelo,
RadioButton rb=(RadioButton) findViewById(R.id.radioButton1);
rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
rb.setButtonDrawable(R.drawable.''you image here'');
}
});
}
Cree un selector seleccionable para su botón de opción en la carpeta drawable / radio_button.xml y mencione todos los estados necesarios para su botón de opción.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:state_window_focused="false"
android:drawable="@drawable/radio_button_on" />
<item
android:state_checked="false"
android:state_window_focused="false"
android:drawable="@drawable/radio_button_off" />
<item
android:state_checked="true"
android:state_pressed="true"
android:drawable="@drawable/radio_button_on_pressed" />
<item
android:state_checked="false"
android:state_pressed="true"
android:drawable="@drawable/radio_button_off_pressed" />
<item
android:state_checked="true"
android:state_focused="true"
android:drawable="@drawable/radio_button_on_selected" />
<item
android:state_checked="false"
android:state_focused="true"
android:drawable="@drawable/radio_button_off_selected" />
<item
android:state_checked="true"
android:drawable="@drawable/radio_button_on" />
<item
android:state_checked="false"
android:drawable="@drawable/radio_button_off" />
</selector>
Y especifique android: button = "@ drawable / radio_button" para su botón de radio
No te olvides de agregar las imágenes correspondientes para diferentes estados de botón de radio.
Espero que esto ayude..
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
radioButton.setButtonTintList(ContextCompat.getColorStateList(mContext, R.color.colorGris));
}else {//Do something if you have a lower version}
Para mi esta funcionando.
Este sitio es realmente bueno para personalizar componentes de Android en general: android-holo-colors.com
Simplemente elija el botón de opción, haga que el color sea rojo, descárguelo y utilícelo en su proyecto.
Lo más rápido que puedes hacer es configurar el buttonTint
a tu color deseado:
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio"
android:checked="true"
android:buttonTint="@color/your_color"/>
En tus values/colors.xml
pon tu color en este caso uno rojizo:
<color name="your_color">#e75748</color>
Resultado:
Como señaló @smashing, esto solo funcionará en el nivel de API> = 21
Para cambiar el color del botón de RadioButton programáticamente, y funciona en el nivel de api <21, debe usar AppCompatRadioButton
lugar de RadioButton
:
(De lo contrario, le avisará a setbuttontintlist requrie api level 21
)
import android.support.v7.widget.AppCompatRadioButton;
AppCompatRadioButton radioButton = new AppCompatRadioButton(getActivity());
radioButton.setSupportButtonTintList(
ContextCompat.getColorStateList(getActivity(),
R.color.single_choice_state_list));
single_choice_state_list.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/single_choice_checked"></item>
<item android:state_checked="false" android:color="@color/single_choice_unchecked"></item>
</selector>
Puede realizar un tinte compatible hacia atrás en el botón de radio
XML:
<android.support.v7.widget.AppCompatRadioButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/red"/>
O java:
CompoundButton button = (CompoundButton) findViewById(R.id.radioButton);
CompoundButtonCompat.setButtonTintList(button, ContextCompat.getColorStateList(this, R.color.red));
Solo vine a mostrar algo que realmente me ayudó con esto:
Todos hablan sobre cómo usar el tinte y cómo usar el colorAccent, pero esto no funcionará en teléfonos con API de menos de 21.
Entonces, la solución real en esto o al menos lo que me ayudó fue usar android.support.v7.widget.AppCompatRadioButton
lugar de RadioButton
Con esto en su diseño, puede usar: app:buttonTint="@color/yourColor"
Sin recibir advertencias o problemas sobre la compatibilidad de la vista.
Y, no te olvides de añadir:
xmlns:app="http://schemas.android.com/apk/res-auto"
a su diseño padre o a su widget.
Editar :
@aselims menciona en un comentario que no hay buttonTint
en el espacio de nombres de la app
.
Entonces ... aquí está mi estilo actual para esta solución:
<style name="MRadioButton.Purple" parent="Widget.AppCompat.CompoundButton.RadioButton">
<item name="colorAccent">@color/youColor</item>
<item name="colorControlHighlight">@color/yourColor</item>
<item name="android:colorPressedHighlight">@color/yourColor</item>
<item name="colorPrimaryDark">@color/yourColor</item>
<item name="colorPrimary">@color/yourColor</item>
<item name="colorControlActivated">@color/yourColor</item>
</style>
agregue estas dos propiedades en su estilo que está usando en el manifiesto con la actividad
<item name="colorControlNormal">@color/grey</item> // for state released color
<item name="colorAccent">@color/blueLogo</item> //for state pressed color
//get radio button reference from layout
RadioButton raPrivate = (RadioButton) layout.findViewById(R.id.radioPrivate);
//parse textColor from string hex code
int textColor = Color.parseColor("#000000");
//set textcolor to radioButton
raPrivate.setButtonTintList(ColorStateList.valueOf(textColor));
u solo puede asignar objetos ColorStateList como color para el radioButton, si u usa valueOf solo usará un color.
Espero que esto ayude:>