Cambiar el color del círculo del botón de opción

158

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.

Amandeep Singh
fuente
consulte este enlace: heliodorj.blogspot.in/2009/04/…
Desarrollador de Android
Use dos imágenes para el botón de radio, uno está seleccionado y otro no, chane estas imágenes en Radiobutton, haga clic usando el recurso setbackground o usando el selector xml.
SAURABH_12

Respuestas:

288

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:

Botón de radio de color Android

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
}
Jorge Arimany
fuente
1
@emaillenin, si desea cambiar el tinte de color por código, debe usar control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);dónde controlestá el control que desea cambiar el tinte y colores un valor entero del color que desea, por ejemploR.color.red
Jorge Arimany
1
@JorgeArimany Para un RadioButton, ¿es getButtonDrawable o getCompoundDrawables? getCompoundDrawables devuelve una Lista
Lenin Raj Rajasekaran
@emaillenin, gracias, mi respuesta a tu comentario fue para otros controles como un botón, he actualizado mi respuesta agregando el código que estás buscando, espero que te ayude
Jorge Arimany
3
@JorgeArimany Lo tengo funcionando para> 21 ya ... Estoy buscando respuestas específicamente para <21
Lenin Raj Rajasekaran
Para cambiar el color de un botón marcado, puede agregar o reemplazar un estado android.R.attr.state_checkedy agregar el color.
6rchid
159

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 + Enteren 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 setSupportButtonTintListmé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:

Este está probado en API 19

Vea el enlace de referencia de Android para más detalles.

aknay
fuente
10
Esta respuesta debe ser la aceptada. Si desea agregar este botón de opción de soporte a través de xml, use<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg el
22
setSupportButtonTintListes 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).
wampastompa
2
@wampastompa tiene razón. En API 22, el resultado fue que solo vi un círculo externo, nunca se llenó cuando se marcó. @aknay; por favor actualice su respuesta
Nino van Hooff
1
Estoy en la API 16. Agrego los botones de radio AppCompat como se enumeran arriba, sin embargo, todavía no se muestra correctamente.
tccpg288
1
no necesita ningún código, vea la respuesta de IgorOliveira. Funciona para todas las versiones.
Kirill Karmazin
77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />
IgorOliveira
fuente
11
¡Esta es la respuesta para dispositivos pre, actuales y posteriores a lollypop! Genial
sdelvalle57
1
Esta debería ser la respuesta aceptada. Corto y perfecto. NOTA: use app: buttonTint = "@ color / Color" pero no andoid: buttonTint = "@ color / Color"!
Kirill Karmazin
@KirillKarmazin aceptado debería ser el que funcione para <21
user924
56

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 buttonen 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.xmlen 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/colorAccentcon el color de su elección.

Vaibhav Sharma
fuente
¿Cómo haría esto programáticamente?
tccpg288
@ tccpg288 Si usa este xml y desea cambiar el color mediante programación, simplemente use radioButton.setChecked (false) o radioButton.setChecked (true)
Vaibhav Sharma
No entiendo tu pregunta. ¿Puedes por favor elaborar?
Vaibhav Sharma
Mi error, ¿importa si uso RadioButton normal o AppCompat RadioButton?
tccpg288
1
No funciona, ¿qué pasa cuando inicializo el RadioButton? Aquí está mi código: mPollAnswerArrayList.add ((indexCreated), new RadioButton ((getActivity (). GetApplicationContext ()), null, R.style.radiobutton));
tccpg288
18

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:buttonTintlugar de android:buttonTinty también en android.support.v7.widget.AppCompatRadioButtonlugar de Radiobutton!

srt
fuente
16
  1. 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>  
    
  2. 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

batsheva
fuente
1
Esto debería aceptarse como respuesta, funciona en todas las versiones y es más limpio
Antonis Radz, el
Tuve que usar <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.
Taylor Venissat
16

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" />
Rasoul Miri
fuente
Debería aclararse: buttonTint funciona para API 21 y aplicaciones que usan AppCompat / AndroidX, no importa API
Chisko
12

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.

Jaura
fuente
El tema dentro del RadioButton ya no funciona (¿ya?). Se bloquea al hacer clic en el botón, porque no se encuentra el método onClick, aunque está aquí.
Bevor
Este problema tendrá alguna otra razón. Asegúrese de obtener la ID de la vista correcta antes de implementar onClick en esa vista.
Jaura
9

Establecer la buttonTintpropiedad. Por ejemplo, android:buttonTint="#99FF33".

Arenoso
fuente
9
Esto es solo después de API 21
miracle-doh
7

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.

Hatem Badawi
fuente
6

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:

ingrese la descripción de la imagen aquí

colorControlNormal se usa para el estado sin marcar y colorAccent para marcado.

Nosov Pavel
fuente
5

Hay un atributo xml para ello:

android:buttonTint="yourcolor"
el aprendiz
fuente
Asegúrese de que su API mínima sea superior a 21 o esto no funcionará
Jcorretjer
puede usar esto para compatibilidad con versiones anteriores: app: buttonTint = "your_color"
Mridul Das
"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í
Chisko
3

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>
Saman Sattari
fuente
2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

Todos los botones cambiarán de color, el cuadro circular y el cheque central.

texeratx
fuente
1
Pero no la onda ;-)
Waza_Be
1

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

Velmurugan V
fuente
0

La forma más fácil es cambiar el colourAccentcolor, 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 >

Manohar Reddy
fuente
0

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"/>

anju jo
fuente
0

solo use el android:buttonTint="@color/colorPrimary"atributo en la etiqueta, espero que ayude

Cevin Ways
fuente
0

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>

Willian S. Praciano
fuente
-4

@ 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.

Iturbo
fuente
Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente reputación , podrá comentar cualquier publicación ; en su lugar, proporcione respuestas que no requieran una aclaración del autor de la pregunta . - De la opinión
semirturgay
Mi respuesta es cambiar el color básico de la aplicación y, por supuesto, puede cambiar el color del botón de radio a blanco.
Iturbo