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

Amandeep Singh
quelle
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
}
Jorge Arimany
quelle
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 .

aknay
quelle
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" />
IgorOliveira
quelle
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.

Vaibhav Sharma
quelle
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!

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

Batsheva
quelle
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" />
Rasoul Miri
quelle
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.

Jaura
quelle
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".

Sandig
quelle
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.

Hatem Badawi
quelle
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 .

Nosov Pavel
quelle
5

Es gibt ein XML-Attribut dafür:

android:buttonTint="yourcolor"
der Lernende
quelle
Stellen
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>
Saman Sattari
quelle
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.

Texeratx
quelle
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.

Velmurugan V.
quelle
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 >

Manohar Reddy
quelle
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"/>

anju jo
quelle
0

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

Cevin Ways
quelle
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>

Willian S. Praciano
quelle
-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.

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