Bir android radyo düğmesi grubundaki radyo düğmesi simgesini değiştirmek mümkün mü


95

Android uygulamamın kullanıcısının bazı parametreleri ayarlamasına izin vermek istiyorum. Radyo düğmesi bu durum için idealdir. Ancak, radyo düğmelerinin işlenmesini sevmiyorum.

Radyo düğmesi simgesini değiştirmek mümkün mü? Örneğin, her satır için özel bir düzen oluşturmak ve bu düzende kendi simgemi referans almak ve yazı tipini vb. Değiştirmek mümkün mü?

Yanıtlar:


168

Evet, radyo düğmeleri için kendi stilinizi res / values ​​/ styles.xml adresinde tanımlamanız mümkündür:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme">
   <item name="android:radioButtonStyle">@style/RadioButton</item>
</style>
<style name="RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">
   <item name="android:button">@drawable/radio</item>
</style>
</resources>

Buradaki "radyo", durum bilgisi içeren bir çekilebilir, radio.xml olmalıdır:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_window_focused="false"
        android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="false" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="true" android:state_focused="true"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_focused="true"
        android:drawable="@drawable/radio_normal_off" />
    <item android:state_checked="false" android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:drawable="@drawable/radio_hover" />
    </selector>

Ardından, Özel temayı tüm uygulamaya veya seçtiğiniz etkinliklere uygulayın.

Temalar ve stiller hakkında daha fazla bilgi için http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/ iyi bir kılavuza bakın.


13
Ayrıca, android: button özelliğini, kendisi için ayrı bir özel stil tanımlamak yerine radyo düğmesinin kendisinde de ayarlayabilirsiniz.
Yoni Samlan

7
Doğru, ancak bu çok iyi bir uygulama değil çünkü genellikle birden fazla radyo düğmeniz var.
Konstantin Burov

@KonstantinBurov, 9 yama görüntüsü kullanıyorsam?
Hades

@KonstantinBurov Programlı olarak Düğme eklemediğiniz sürece, bu durumda harika :)
Cornholio

1
Destek teması için <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style kullanmak isteyebilir / RadioButton </item> </style>
Dhruv Mevada

30

Özel görüntüyü normal düğme gibi radyo düğmesine koyabilirsiniz. bunun için çekilebilir klasörde bir XML dosyası oluşturun, örneğin

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sub_screens_aus_hl" 
    android:state_pressed="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_checked="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_focused="true" />
<item android:drawable="@drawable/sub_screens_aus_dis" />  
</selector> 

Burada radyo düğmesi için 3 farklı resim kullanabilirsiniz

ve bu dosyayı RadioButton'da şu şekilde kullanın:

android:button="@drawable/aus"
android:layout_height="120dp"
android:layout_width="wrap_content" 

13

Yalnızca radyo düğmesini değiştirmenin daha kolay yolu, çekilebilir sağ için seçiciyi ayarlamaktır

<RadioButton
    ...
    android:button="@null"
    android:checked="false"
    android:drawableRight="@drawable/radio_button_selector" />

Ve seçici:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_checkbox_checked" android:state_checked="true" />
    <item android:drawable="@drawable/ic_checkbox_unchecked" android:state_checked="false" /></selector>

Bu kadar


1
En iyi çözüm, benim durumum için 'drawableRight'ı' düğme 'olarak değiştirdim ve xml seçicisine biraz dolgu ekledim
F-1

Bu en iyi çözüm. Bu şekilde kullandım ve iyi çalışıyor. Ancak andoidx'e geçtikten sonra android: button = "@ null" çalışmıyor ve her öğe için iki radyo düğmesi simgesi görüyoruz! .
maniaq

1

evet .... "Xml'den

android:button="@drawable/yourdrawable" 

ve Java'dan

myRadioButton.setButtonDrawable(resourceId or Drawable);

'


0

İşte muhtemelen hızlı bir yaklaşım,

görüntü açıklamasını buraya girin

Yukarıda gösterilen iki simgeyle, böyle bir RadioGroupşeye sahip olacaksınız

görüntü açıklamasını buraya girin

  • değiştirmek RadioGroupyataya bireyin yönünü
  • her bir RadioButtonÖzellikler için, Button altında simge vermeyi deneyin CompoundButton,
  • Dolgu ve boyutu ayarlayın,
  • ve işaretlendiğinde Arka Plan niteliğini ayarlayın.

0

Programlı olarak yapmak istemeniz durumunda,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
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.