Ändern Sie die Kreisfarbe des Optionsfelds


157

Ich möchte die Farbe des Kreises von RadioButton in einem meiner Projekte ändern. Ich konnte nicht verstehen, welche Eigenschaft festgelegt werden soll. Die Hintergrundfarbe, die ich habe, ist schwarz, so dass es unsichtbar wird. Ich möchte die Farbe des Kreises auf Weiß setzen.


Verweisen Sie auf diesen Link: heliodorj.blogspot.in/2009/04/…
Android Developer

Verwenden Sie zwei Bilder für das Optionsfeld, eines ist ausgewählt und eines nicht. Ändern Sie diese Bilder auf Radiobutton-Klick, indem Sie entweder die Setbackground-Ressource oder die Selektor-XML verwenden.
SAURABH_12

Antworten:


286

Einfacher, stellen Sie einfach die Farbe buttonTint ein: (funktioniert nur auf API-Level 21 oder höher)

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="true"
    android:buttonTint="@color/your_color"/>

Geben Sie in Ihre Werte / Farben.xml Ihre Farbe in diesem Fall rötlich ein:

<color name="your_color">#e75748</color>

Ergebnis:

Farbiges Android-Optionsfeld

Wenn Sie dies per Code tun möchten (auch API 21 und höher):

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
}

1
@emaillenin, wenn Sie den Farbton durch Code ändern möchten, sollten Sie verwenden, control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);wo controlsich das Steuerelement befindet, das Sie den Farbton ändern möchten, und colorein ganzzahliger Wert der gewünschten Farbe ist, z. B.R.color.red
Jorge Arimany

1
@JorgeArimany Ist es für einen RadioButton getButtonDrawable oder getCompoundDrawables? getCompoundDrawables gibt eine Liste zurück
Lenin Raj Rajasekaran

@emaillenin, danke, meine Antwort auf Ihren Kommentar war für andere Steuerelemente wie eine Schaltfläche. Ich habe meine Antwort durch Hinzufügen des gesuchten Codes aktualisiert. Ich hoffe, das hilft Ihnen
Jorge Arimany

3
@JorgeArimany Ich habe es bereits für> 21 zum Laufen gebracht. Ich suche nach Antworten speziell für <21
Lenin Raj Rajasekaran

Um die Farbe einer aktivierten Schaltfläche zu ändern, können Sie einen Status hinzufügen oder ersetzen android.R.attr.state_checkedund die Farbe hinzufügen.
6.

159

Update: 1. Verwenden Sie stattdessen dieses

   <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. Fügen Sie diese Zeile dann in das übergeordnete Layout oder Alt + Enterin Android Studio ein, um sie automatisch hinzuzufügen xmlns:app="http://schemas.android.com/apk/res-auto"

Das Mindestbeispiel sollte folgendermaßen aussehen:

<?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. Sollte in Ihrem Programm so aufrufen. AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

Grundsätzlich kann diese Art von Muster für alle AppCompact-Typen wie AppCompatCheckBox, AppCompatButton usw. angewendet werden.

Alte Antwort:

Um die unten stehende Android API 21 zu unterstützen, können Sie AppCompatRadioButton verwenden. Verwenden Sie dann die setSupportButtonTintListMethode, um die Farbe zu ändern. Dies ist mein Code-Snippet zum Erstellen eines Optionsfelds.

    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);

Testergebnis bei API 19:

Dieser ist auf API 19 getestet

Weitere Informationen finden Sie unter dem Android- Referenzlink .


10
Diese Antwort sollte akzeptiert werden. Wenn Sie dieses Support-Optionsfeld über XML hinzufügen möchten, verwenden Sie<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg

22
setSupportButtonTintListist eine private Methode, die Sie nicht verwenden sollen. Die Optionsfelder verhalten sich bei bestimmten Android-Versionen merkwürdig. Verwenden Sie stattdessen CompoundButtonCompat.setButtonTintList(rb, colorStateList).
Wampastompa

2
@wampastompa ist richtig. Auf API 22 war das Ergebnis, dass ich nur einen äußeren Kreis sah, der bei der Überprüfung nie gefüllt wurde. @aknay; Bitte aktualisieren Sie Ihre Antwort
Nino van Hooff

1
Ich bin auf API 16. Ich füge die AppCompat-Optionsfelder wie oben aufgeführt hinzu, sie werden jedoch immer noch nicht korrekt angezeigt.
tccpg288

1
Sie brauchen keinen Code, siehe IgorOliveiras Antwort. Funktioniert für alle Versionen.
Kirill Karmazin

77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />

11
Dies ist die Antwort für Pre-, Current- und Post-Lollypop-Geräte! Great
sdelvalle57

1
Dies sollte die akzeptierte Antwort sein. Kurz und perfekt. HINWEIS: Verwenden Sie die App: buttonTint = "@ color / Color", aber nicht andoid: buttonTint = "@ color / Color"!
Kirill Karmazin

@ KirillKarmazin akzeptiert sollte sein, was für <21
user924

56

Arbeiten an API vor 21 sowie nach 21. In Ihrem styles.xmlPut:

<!-- 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>

Ihre radio buttonin XML sollte aussehen wie:

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

Jetzt müssen Sie nur noch ein radiobutton_drawable.xmlin Ihrem machen drawable folder. Folgendes müssen Sie einfügen:

<?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>

Ihr 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>

Ihr 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>

Ersetzen Sie einfach durch @color/colorAccentdie Farbe Ihrer Wahl.


Wie würde ich das programmgesteuert machen?
tccpg288

@ tccpg288 Wenn Sie diese XML verwenden und die Farbe programmgesteuert ändern möchten, verwenden Sie einfach radioButton.setChecked (false) oder radioButton.setChecked (true)
Vaibhav Sharma

Ich verstehe deine Frage nicht. Können Sie bitte näher darauf eingehen?
Vaibhav Sharma

Mein Fehler, spielt es eine Rolle, ob ich den regulären RadioButton oder den AppCompat RadioButton verwende?
tccpg288

1
Es funktioniert nicht. Was ist, wenn ich den RadioButton initialisiere? Hier ist mein Code: mPollAnswerArrayList.add ((indexCreated), neuer RadioButton ((getActivity (). GetApplicationContext ()), null, R.style.radiobutton));
tccpg288

18

Sie müssen diesen Code verwenden:

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

Verwenden app:buttonTintanstelle von android:buttonTintund auch android.support.v7.widget.AppCompatRadioButtonanstelle von Radiobutton!


16
  1. Deklarieren Sie einen benutzerdefinierten Stil in Ihrer Datei styles.xml.

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. Wenden Sie diesen Stil über das Attribut android: theme auf Ihren RadioButton an.

    <RadioButton  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Radio Button"
        android:theme="@style/MyRadioButton"/>

    Nur wenn sich Ihre Aktivität erstreckt AppCompatActivity


1
Dies sollte als Antwort akzeptiert werden, es funktioniert auf allen Versionen und es ist am saubersten
Antonis Radz

Ich musste es benutzen <item name="android:colorControlActivated">@color/pink</item>, um für mich zu arbeiten. Ich bin mir immer noch nicht sicher warum. Ansonsten ist dies eine gute Antwort.
Taylor Venissat

16

Für unter API 21

Erstellen Sie einen benutzerdefinierten Stil 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>

Verwenden Sie im Layout das Thema:

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/RadioButton" />

Für API 21 und mehr

Verwenden Sie einfach buttonTint

 <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:buttonTint="@color/green" />

Sollte geklärt werden: buttonTint funktioniert für API 21 und Apps, die AppCompat / AndroidX verwenden, unabhängig von API
Chisko

12

Die Frage ist alt, aber ich denke, meine Antwort wird den Menschen helfen. Sie können die Farbe des deaktivierten und aktivierten Status des Optionsfelds ändern, indem Sie den Stil in XML verwenden.

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

In 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>

Sie können die gewünschten Farben in diesem Stil einstellen.


Das Thema im RadioButton funktioniert nicht mehr (mehr?). Es stürzt beim Klicken auf die Schaltfläche ab, da die onClick-Methode nicht gefunden wird, obwohl sie hier vorhanden ist.
Bevor

Dieses Problem hat einen anderen Grund. Stellen Sie sicher, dass Sie die ID der richtigen Ansicht erhalten, bevor Sie den onClick für diese Ansicht implementieren.
Jaura

9

Legen Sie die buttonTintEigenschaft fest. Zum Beispiel android:buttonTint="#99FF33".


9
Dies ist erst nach API 21
Miracle-Doh

7

Ich habe es so kurz gemacht (Arbeiten an API vor 21 sowie nach 21)

Ihr Optionsfeld in XML sollte so aussehen

  <RadioButton android:id="@+id/radioid"                    
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"                 
                android:button="@drawable/radiodraw" />

in 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>

Sie müssen eine transparente Farbe hinzufügen, um den deaktivierten Status zu zeichnen. Andernfalls wird ein festes schwarzes Oval gezeichnet.


6

Manchmal müssen Sie colorControlNormal einfach so überschreiben :

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

Und Sie erhalten einen Knopf wie diesen:

Geben Sie hier die Bildbeschreibung ein

colorControlNormal wird für den deaktivierten Status und colorAccent für den aktivierten Status verwendet .


5

Es gibt ein XML-Attribut dafür:

android:buttonTint="yourcolor"


Sie können dies aus Gründen der Abwärtskompatibilität verwenden: app: buttonTint = "your_color"
Mridul Das

"Make sure your min API is higher then 21 or this won't work"das ist falsch. Ich ziele auf API 17 mit AndroidX ab und dies ist das einzige, was für mich funktioniert hat
Chisko

3

Für diejenigen, die den deaktivierten, aktivierten und aktivierten Status ändern möchten, führen Sie die folgenden Schritte aus:

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

Erstellen Sie dann im Ordner "color res" eine Datei mit dem Namen "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>

2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

Alle Schaltflächen ändern die Farbe, das Kreisfeld und das zentrale Häkchen.


1
Aber nicht die Welligkeit ;-)
Waza_Be

1

RadioButton verwendet standardmäßig die Farbe colorAccent in der Datei res / values ​​/ color.xml. Gehen Sie also zu dieser Datei und ändern Sie den Wert von

<color name="colorAccent">#3F51B5</color>

auf die gewünschte Farbe.


0

Am einfachsten ist es, die colourAccentFarbe zu ändern. Beachten Sie values->colours.xml
jedoch, dass sich auch andere Dinge wie das Bearbeiten der Textcursorfarbe usw. ändern.

< color name="colorAccent">#75aeff</color >


0

Wenn Sie eine andere Farbe für angeklickte und nicht angeklickte Optionsfelder festlegen möchten, verwenden Sie einfach:

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


0

Verwenden Sie einfach das android:buttonTint="@color/colorPrimary"Attribut für das Tag und hoffen Sie, dass es hilft


0

Ich hatte dieses Problem. Wenn Ihre App einen schwarzen Hintergrund hat und Sie viele RadioButtons haben, die aufgrund des Hintergrunds unsichtbar sind, ist es kompliziert, den android: buttonTint jedes einzelnen zu bearbeiten. Die beste Lösung besteht darin, das übergeordnete Thema in Ihrer Datei styles.xml zu ändern

ich habe mich verändert

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

zu

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

So wurden die Kreise der RadioButtons heller und jetzt auch mit schwarzem Hintergrund sichtbar.

Dies ist meine style.xml-Datei:

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


-4

@ jh314 ist korrekt. In AndroidManifest.xml

 <application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

In 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>

Der Elementname muss colorAccent sein. Er bestimmt die Standardfarbe der Widgets der Anwendung.

Wenn Sie jedoch die Farbe im Code ändern möchten, ist die Antwort von Vielleicht @ aknay richtig.


Dies gibt keine Antwort auf die Frage. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren . Geben Sie stattdessen Antworten, die nicht vom Fragesteller geklärt werden müssen . - Von Review
Semirturgay

Meine Antwort ist, die Grundfarbe der App zu ändern und natürlich die Farbe des Radiobuttons in Weiß zu ändern.
Iturbo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.