Radyo düğmesinin Daire rengini değiştirme


158

Ben çemberinin rengini değiştirmek istediğiniz RadioButton benim birinde projeye Sete hangi özelliği anlayamadık. Sahip olduğum arka plan rengi siyahtır, bu yüzden görünmez olur. Dairenin rengini beyaz olarak ayarlamak istiyorum.



Biri seçili ve diğeri seçili değilken radyo düğmesi için iki görüntü kullan
SAURABH_12

Yanıtlar:


288

Daha basit, sadece buttonTint rengini ayarlayın: (sadece api seviyesi 21 veya üstü üzerinde çalışır)

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

değerlerinizde / renklerinizde.

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

Sonuç:

Renkli Android radyo düğmesi

Kod ile yapmak istiyorsanız (ayrıca api 21 ve üstü):

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, renk tonunu kodla değiştirmek isterseniz, tonu değiştirmek istediğiniz kontrolün control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);nerede contrololduğunu ve istediğiniz colorrengin tamsayı bir değer olduğunu kullanmalısınızR.color.red
Jorge Arimany

1
@JorgeArimany Bir RadioButton için, getButtonDrawable mı yoksa getCompoundDrawables mı? getCompoundDrawables bir Liste döndürür
Lenin Raj Rajasekaran

@emaillenin, teşekkür ederim, yorumun cevabım bir düğme gibi diğer kontroller içindi, aradığınız kodu ekleyerek cevabımı yükselttim, size yardımcı olacağını umuyoruz
Jorge Arimany

3
@JorgeArimany Zaten> 21 için çalıştım .. Özellikle <21
Lenin Raj Rajasekaran 20:15

İşaretli bir düğmenin rengini değiştirmek için bir durum ekleyebilir veya yerine durum android.R.attr.state_checkedekleyebilir ve rengi ekleyebilirsiniz.
6rchid

160

Güncelleme: 1. bunun yerine bunu kullanın

   <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. Ardından otomatik olarak eklemek için bu satırı üst düzene veya Alt + EnterAndroid Studio'ya ekleyin xmlns:app="http://schemas.android.com/apk/res-auto"

Minimum Örnek şu şekilde görünmelidir:

<?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. Programınızda böyle çağırmalısınız. AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

Temel olarak, bu tür desen AppCompatCheckBox, AppCompatButton ve benzeri gibi tüm AppCompact türleri için uygulanabilir.

Eski Cevap:

Android API 21'in altında desteklemek için AppCompatRadioButton'u kullanabilirsiniz . Sonra setSupportButtonTintListrengi değiştirmek için yöntemi kullanın. Bu, radyo düğmesi oluşturmak için kod snippet'im.

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

API 19'da test edilen sonuç:

Bu, API 19 üzerinde test edilmiştir

Daha fazla ayrıntı için android referans bağlantısına bakın .


10
Bu cevap kabul edilen cevap olmalıdır. Bu destek radyo düğmesini xml ile eklemek istiyorsanız, kullanın<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg

22
setSupportButtonTintListkullanmak istemediğiniz özel bir yöntemdir. Radyo düğmeleri, Android'in belirli sürümlerinde garip davranacaktır. Bunun yerine kullanın CompoundButtonCompat.setButtonTintList(rb, colorStateList).
wampastompa

2
@wampastompa doğru. API 22'de sonuç, kontrol edildiğinde asla doldurulmayan sadece bir dış daire gördüm. @aknay; lütfen cevabınızı güncelleyin
Nino van Hooff

1
API 16'dayım. Yukarıda listelenen AppCompat Radio düğmelerini ekliyorum, ancak yine de düzgün görüntülenmiyor.
tccpg288

1
herhangi bir koda ihtiyacınız yoksa IgorOliveira'nın cevabına bakınız. Tüm sürümler için çalışır.
Kirill Karmazin

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

11
Bu öncesi, mevcut ve sonrası lolipop cihazlar için cevap !! Great
sdelvalle57

1
Bu kabul edilen cevap olmalı. Kısa ve mükemmel. NOT: app kullanın: buttonTint = "@ color / Color" ama andoid değil: buttonTint = "@ color / Color"!
Kirill Karmazin

@KirillKarmazin kabul edildi <21
user924

56

API üzerinde çalışmak iyi yazı 21 kadar 21 öncesi senin içinde styles.xmlkoymak:

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

Sizin radio buttonxml gibi görünmelidir:

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

Şimdi tüm is a yapmak yapmanız gereken radiobutton_drawable.xmlGözlerinde farklı drawable folder. İçine koymanız gerekenler:

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

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

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

Sadece @color/colorAccentistediğiniz renkle değiştirin .


Bunu programlı olarak nasıl yaparım?
tccpg288

@ tccpg288 Bu xml kullanıyorsanız ve rengi programlı olarak değiştirmek istiyorsanız, radioButton.setChecked (false) veya radioButton.setChecked (true) öğesini kullanın
Vaibhav Sharma

Sorunu anlamıyorum. Lütfen biraz açıklayabilir misiniz?
Vaibhav Sharma

Benim hatam, normal RadioButton veya AppCompat RadioButton kullanmamın önemi var mı?
tccpg288

1
Çalışmıyor, RadioButton'u başlattığımda ne olacak? İşte benim kod: mPollAnswerArrayList.add ((indexCreated), yeni RadioButton ((getActivity (). GetApplicationContext ()), null, R.style.radiobutton));
tccpg288

18

Bu kodu kullanmanız gerekir:

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

Kullanılması app:buttonTintyerine android:buttonTintve ayrıca android.support.v7.widget.AppCompatRadioButtonyerine Radiobutton!


16
  1. Styles.xml dosyanızda özel stil bildirin.

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. Bu stili android: tema özelliği ile RadioButton'ınıza uygulayın.

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

    sadece etkinliğiniz uzarsa AppCompatActivity


1
Bu bir cevap olarak kabul edilmelidir, tüm sürümlerde çalışır ve en temiz
Antonis Radz

Benim <item name="android:colorControlActivated">@color/pink</item>için çalışmak için kullanmalıydım . Hala neden olduğundan emin değilim. Aksi takdirde, bu iyi bir cevaptır.
Taylor Venissat

16

API 21 altında

Özel stil oluşturma 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>

Düzen kullanım temasında:

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

API 21 ve daha fazlası için

Sadece buttonTint'i kullanın

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

Açıklığa kavuşturulmalıdır: buttonTint, API 21 ne olursa olsun API 21 ve AppCompat / AndroidX kullanan uygulamalar için çalışır
Chisko

12

Soru eski ama bence cevabım insanlara yardım edecek. Xml'deki stili kullanarak radyo düğmesinin işaretlenmemiş ve işaretli durumunun rengini değiştirebilirsiniz.

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

Style.xml içinde

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

İstediğiniz renkleri bu stilde ayarlayabilirsiniz.


RadioButton içindeki tema çalışmıyor (artık?). Düğmeye tıklarken kilitleniyor, çünkü burada olmasına rağmen onClick yöntemi bulunamadı.
Bevor

bu sorunun başka bir nedeni olacaktır. Bu görünüme onClick'i uygulamadan önce doğru görünümün kimliğini aldığınızdan emin olun.
Jaura

9

buttonTintÖzelliği ayarlayın . Örneğin android:buttonTint="#99FF33",.


9
Bu sadece API 21'den sonra
miracle-doh

7

Bu şekilde kısa bir yol yaptım (21 öncesi ve 21 numaralı API üzerinde çalışma)

Xml'deki radyo düğmeniz şöyle görünmelidir

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

radiodraw.xml dosyasında

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

denetlenmeyen durumu çizmek için şeffaf renk eklemeniz gerekir, aksi takdirde katı siyah oval çizin.


6

Bazen sadece colorControlNormal'ı şu şekilde geçersiz kılmanız gerekir :

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

Ve böyle bir düğme alacaksınız:

resim açıklamasını buraya girin

colorControlNormal , denetlenmeyen durum için kullanılır ve kontrol için colorAccent .


5

Bunun için bir xml özelliği var:

android:buttonTint="yourcolor"


geriye dönük uyumluluk için bunu kullanabilirsiniz: app: buttonTint = "your_color"
Mridul Das

"Make sure your min API is higher then 21 or this won't work"bu yanlış. AndroidX ile API 17'yi hedefliyorum ve bu benim için işe
yarayan

3

Devre dışı bırakma, işaretleme ve etkinleştirme durumlarını değiştirmek isteyenler için aşağıdaki adımları uygulayın:

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

daha sonra color res klasöründe "radio_button_color.xml" adlı bir dosya oluşturun:

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

Tüm düğmelerin rengi, daire kutusu ve merkezi kontrol değişecektir.


1
Ama dalgalanma değil ;-)
Waza_Be

1

RadioButton varsayılan olarak res / valu / colors.xml dosyasında colorAccent rengini alır. Bu dosyaya gidin ve

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

istediğiniz renge.


0

En kolay yol colourAccentrengi değiştirmektir , values->colours.xml
ancak metin imleci rengini düzenleme gibi diğer şeyleri de değiştireceğini unutmayın.

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


0

Tıklanan ve tıklanmayan radyo düğmesi için farklı bir renk ayarlamak istiyorsanız sadece şunu kullanın:

   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

android:buttonTint="@color/colorPrimary"etiketi üzerinde sadece nitelik kullanın , yardımcı olacağını umuyoruz


0

Bu sorunu yaşadım. Uygulamanızın siyah bir arka planı varsa ve arka plan nedeniyle görünmeyen çok sayıda RadioButtons varsa, android'i düzenlemek karmaşıktır: buttonTint her birinin rengi, en iyi çözüm styles.xml dosyanızdaki ana temayı değiştirmektir

Değiştim

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

için

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

Böylece RadioButtons'un daireleri daha açık bir gri gölgesi haline geldi ve şimdi siyah bir arka planla bile görülebilirler.

Bu benim style.xml dosyam:

<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 doğru. AndroidManifest.xml'de,

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

Style.xml içinde

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

öğe adı colorAccent olmalıdır, uygulamanın widget'larının varsayılan rengine karar verir.

Ancak koddaki rengi değiştirmek isterseniz, @ aknay'ın cevabı doğrudur.


Bu soruya bir cevap vermez. Yeterli bir üne sahip olduğunuzda , herhangi bir yazı hakkında yorum yapabilirsiniz ; bunun yerine askerden açıklama gerektirmeyen cevaplar verin . - Yorumdan
semirturgay

Cevabım uygulamanın temel rengini değiştirmek ve elbette radiobutton'un rengini beyaza değiştirebilir.
Iturbo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.