Czy można zmienić ikonę przycisku opcji w grupie przycisków opcji systemu Android?

95

Chcę, aby użytkownik mojej aplikacji na Androida mógł ustawić niektóre parametry. Przycisk opcji jest idealny w tej sytuacji. Jednak nie podoba mi się renderowanie przycisków radiowych.

Czy można zmienić ikonę przycisku opcji? Na przykład, czy możliwe jest utworzenie niestandardowego układu dla każdego wiersza i odniesienie w tym układzie do mojej własnej ikony i zmiana czcionki i in.

Yamspog
źródło

Odpowiedzi:

168

Tak, to możliwe, że musisz zdefiniować własny styl przycisków opcji w res / values ​​/ styles.xml:

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

'radio' w tym miejscu powinno być stanowym rysunkiem, radio.xml:

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

Następnie po prostu zastosuj motyw niestandardowy do całej aplikacji lub wybranych działań.

Aby uzyskać więcej informacji na temat motywów i stylów, zobacz http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/, który jest dobrym przewodnikiem.

Konstantin Burov
źródło
13
Możesz także po prostu ustawić właściwość android: button w samym przycisku radiowym, zamiast definiować dla niego oddzielny niestandardowy styl.
Yoni Samlan
7
To prawda, ale nie jest to zbyt dobra praktyka, ponieważ zazwyczaj masz więcej niż jeden przycisk opcji.
Konstantin Burov
@KonstantinBurov co jeśli używam obrazu z 9 poprawkami?
Hades,
@KonstantinBurov Chyba że dodajesz Przyciski programowo, w takim przypadku jest super :)
Cornholio
1
Aby uzyskać pomoc motywu, możesz użyć <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style / RadioButton </item> </style>
Dhruv Mevada
30

Możesz umieścić niestandardowy obraz w radiobutton jak normalny przycisk. w tym celu utwórz jeden plik XML w folderze do rysowania np

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

Tutaj możesz użyć 3 różnych obrazów dla przycisku radiobutton

i użyj tego pliku do RadioButton jak:

android:button="@drawable/aus"
android:layout_height="120dp"
android:layout_width="wrap_content" 
Chirag
źródło
13

Łatwiejszym sposobem zmiany tylko przycisku radiowego jest po prostu ustawienie selektora na prawo do wyciągania

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

A selektor to:

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

To wszystko

topcbl
źródło
1
Najlepsze rozwiązanie, w moim przypadku zmieniłem również „drawableRight” na „button” i dodałem trochę wypełnienia do selektora xml
F-1
To najlepsze rozwiązanie. Zostałem użyty w ten sposób i działa dobrze. Ale po migracji do andoidx android: button = "@ null" nie działa i widzimy dwie ikony przycisku opcji dla każdego elementu! .
maniaq
1

tak .... `z Xml

android:button="@drawable/yourdrawable" 

iz Java

myRadioButton.setButtonDrawable(resourceId or Drawable);

`

shweta jariya
źródło
0

Oto prawdopodobnie szybkie podejście,

wprowadź opis obrazu tutaj

Z dwiema ikonami pokazanymi powyżej, powinieneś mieć RadioGroupcoś takiego

wprowadź opis obrazu tutaj

  • zmień RadioGrouporientację na poziomą
  • dla RadioButtonwłaściwości każdego z nich spróbuj podać ikonę Button poniżej CompoundButton,
  • dopasuj wyściółkę i rozmiar,
  • i ustaw atrybut Background po zaznaczeniu.
kolunar
źródło
0

Jeśli chcesz to zrobić programowo,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
Abhishek Kumar
źródło