Quiero cambiar el color del círculo de RadioButton en uno de mis proyectos , no pude entender qué propiedad establecer. El color de fondo que tengo es negro, por lo que se vuelve invisible. Quiero establecer el color del círculo en blanco.
Quiero cambiar el color del círculo de RadioButton en uno de mis proyectos , no pude entender qué propiedad establecer. El color de fondo que tengo es negro, por lo que se vuelve invisible. Quiero establecer el color del círculo en blanco.
Respuestas:
Más simple, solo configure el botón Color de tinte: (solo funciona en el nivel 21 de la API o superior)
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio"
android:checked="true"
android:buttonTint="@color/your_color"/>
en your values / colors.xml ponga su color en este caso rojizo:
<color name="your_color">#e75748</color>
Resultado:
Si desea hacerlo por código (también api 21 y superior):
if(Build.VERSION.SDK_INT>=21)
{
ColorStateList colorStateList = new ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_enabled}, //disabled
new int[]{android.R.attr.state_enabled} //enabled
},
new int[] {
Color.BLACK //disabled
,Color.BLUE //enabled
}
);
radio.setButtonTintList(colorStateList);//set the color tint list
radio.invalidate(); //could not be necessary
}
control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);
dónde control
está el control que desea cambiar el tinte y color
es un valor entero del color que desea, por ejemploR.color.red
android.R.attr.state_checked
y agregar el color.
Actualización: 1. use este en su lugar
<android.support.v7.widget.AppCompatRadioButton
android:id="@+id/rbtn_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/primary" />
2. Luego agregue esta línea en el diseño principal o Alt + Enter
en Android Studio para agregar automáticamente
xmlns:app="http://schemas.android.com/apk/res-auto"
El ejemplo mínimo debería tener este aspecto:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.AppCompatRadioButton
android:id="@+id/rbtn_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/primary" />
</LinearLayout>
3. En su programa, debe llamar así.
AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);
Básicamente, este tipo de patrón se puede aplicar a todos los tipos de AppCompact, como AppCompatCheckBox, AppCompatButton, etc.
Vieja respuesta:
Para admitir la siguiente API 21 de Android, puede usar AppCompatRadioButton. Luego use el setSupportButtonTintList
método para cambiar el color. Este es mi fragmento de código para crear un botón de radio.
AppCompatRadioButton rb;
rb = new AppCompatRadioButton(mContext);
ColorStateList colorStateList = new ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_checked},
new int[]{android.R.attr.state_checked}
},
new int[]{
Color.DKGRAY
, Color.rgb (242,81,112),
}
);
rb.setSupportButtonTintList(colorStateList);
Resultado probado en API 19:
Vea el enlace de referencia de Android para más detalles.
<android.support.v7.widget.AppCompatRadioButton ../>
setSupportButtonTintList
es un método privado que no está destinado a usar. Los botones de radio se comportarán de manera extraña en ciertas versiones de Android. En cambio, use CompoundButtonCompat.setButtonTintList(rb, colorStateList)
.
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/Color" />
Trabajando en API pre 21 y post 21.
En tu opinión styles.xml
:
<!-- custom style -->
<style name="radionbutton"
parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
<item name="android:button">@drawable/radiobutton_drawable</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
Su radio button
en xml debería verse así:
<RadioButton
android:layout_width="wrap_content"
style="@style/radionbutton"
android:checked="false"
android:layout_height="wrap_content"
/>
Ahora todo lo que necesitas hacer es hacer un radiobutton_drawable.xml
en tu drawable folder
. Esto es lo que necesita poner:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_focused="true"/>
<item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_focused="false"/>
<item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_focused="true"/>
<item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_focused="false"/>
</selector>
Su radio_unchecked.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<stroke android:width="1dp" android:color="@color/colorAccent"/>
<size android:width="30dp" android:height="30dp"/>
</shape>
Su radio_checked.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<stroke android:width="1dp" android:color="@color/colorAccent"/>
<size android:width="30dp" android:height="30dp"/>
</shape>
</item>
<item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
<shape android:shape="oval">
<solid android:width="1dp" android:color="@color/colorAccent"/>
<size android:width="10dp" android:height="10dp"/>
</shape>
</item>
</layer-list>
Simplemente reemplace @color/colorAccent
con el color de su elección.
Tienes que usar este código:
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/black"
android:text="Radiobutton1"
app:buttonTint="@color/black" />
Usando en app:buttonTint
lugar de android:buttonTint
y también en android.support.v7.widget.AppCompatRadioButton
lugar de Radiobutton
!
Declare un estilo personalizado en su archivo styles.xml.
<style name="MyRadioButton" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
Aplique este estilo a su RadioButton a través de Android: atributo de tema.
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Radio Button"
android:theme="@style/MyRadioButton"/>
solo si tu actividad se extiende AppCompatActivity
<item name="android:colorControlActivated">@color/pink</item>
para que funcionara para mí. Todavía no estoy seguro de por qué. De lo contrario, esta es una buena respuesta.
Por debajo de API 21
Crear estilo personalizado RadioButton style.xml
<style name="RadioButton" parent="Theme.AppCompat.Light">
<item name="colorAccent">@color/green</item>
<item name="android:textColorSecondary">@color/mediumGray</item>
<item name="colorControlNormal">@color/red</item>
</style>
En el tema de uso de diseño:
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/RadioButton" />
Para API 21 y más
Solo usa buttonTint
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/green" />
La pregunta es antigua, pero creo que mi respuesta ayudará a las personas. Puede cambiar el color del estado sin marcar y marcado del botón de opción utilizando el estilo en xml.
<RadioButton
android:id="@+id/rb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/RadioButtonStyle" />
En style.xml
<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
<item name="colorAccent">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
</style>
Puede establecer los colores deseados en este estilo.
Establecer la buttonTint
propiedad. Por ejemplo, android:buttonTint="#99FF33"
.
Lo hice de esta manera (trabajando en API pre 21 y post 21)
Su botón de radio en xml debería verse así
<RadioButton android:id="@+id/radioid"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:button="@drawable/radiodraw" />
en radiodraw.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" >
<shape android:shape="oval" >
<stroke android:width="1dp" android:color="#000"/>
<size android:width="30dp" android:height="30dp"/>
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:state_checked="true">
<layer-list>
<item>
<shape android:shape="oval">
<stroke android:width="1dp" android:color="#000"/>
<size android:width="30dp" android:height="30dp"/>
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
<shape android:shape="oval">
<solid android:width="1dp" android:color="#000"/>
<size android:width="10dp" android:height="10dp"/>
</shape>
</item>
</layer-list>
</item>
</selector>
tiene que agregar color transparente para dibujar el estado sin marcar; de lo contrario, dibujará un óvalo negro sólido.
A veces solo necesita anular colorControlNormal de esta manera:
<style name="RadioButtonStyle" parent="AppTheme">
<item name="colorControlNormal">@color/pink</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:textColorSecondary">@color/black</item>
</style>
Y obtendrás un botón como este:
colorControlNormal se usa para el estado sin marcar y colorAccent para marcado.
Hay un atributo xml para ello:
android:buttonTint="yourcolor"
"Make sure your min API is higher then 21 or this won't work"
eso es falso. Estoy apuntando a API 17 con AndroidX y esto es lo único que funcionó para mí
Para aquellos que quieran cambiar los estados deshabilitados, marcados y habilitados, pueden seguir los siguientes pasos:
<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/black"
android:text="Radiobutton1"
app:buttonTint="@color/radio_button_color" />
luego, en la carpeta de resolución de color, cree un archivo llamado "radio_button_color.xml":
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/yellow900" android:state_selected="true" />
<item android:color="@color/yellow800" android:state_checked="true" />
<item android:color="@color/gray800" android:state_enabled="false" />
<item android:color="@color/yellow800" android:state_enabled="true" />
</selector>
RadioButton por defecto toma el color de colorAccent en el archivo res / values / colors.xml. Entonces vaya a ese archivo y cambie el valor de
<color name="colorAccent">#3F51B5</color>
al color que quieras
La forma más fácil es cambiar el colourAccent
color, values->colours.xml
pero tenga en cuenta que también cambiará otras cosas, como editar el color del cursor de texto, etc.
< color name="colorAccent">#75aeff</color >
Si desea establecer un color diferente para el botón de radio cliqueado y no cliqueado, simplemente use:
android:buttonTint="@drawable/radiobutton" in xml of the radiobutton and your radiobutton.xml will be:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#1E88E5"/>
<item android:state_checked="true" android:color="#00e676"/>
<item android:color="#ffffff"/>
solo use el android:buttonTint="@color/colorPrimary"
atributo en la etiqueta, espero que ayude
Tuve este problema Si su aplicación tiene un fondo negro y tiene muchos RadioButtons que son invisibles debido al fondo, es complicado editar el Android: buttonTint de cada uno, la mejor solución es cambiar el tema principal en su archivo styles.xml
Cambié
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
a
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
Entonces, los círculos de RadioButtons se convirtieron en un tono gris más claro y ahora son visibles incluso con un fondo negro.
Este es mi archivo style.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
@ jh314 es correcto. En AndroidManifest.xml,
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"></application>
En style.xml
<!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">@color/red</item>
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
el nombre del elemento debe ser colorAccent, decide el color predeterminado de los widgets de la aplicación.
Pero si desea cambiar el color en el código, tal vez la respuesta de @aknay sea correcta.