Apakah mungkin untuk mengubah ikon tombol radio di grup tombol radio android

95

Saya ingin mengizinkan pengguna aplikasi android saya kemampuan untuk mengatur beberapa parameter. Tombol radio sangat ideal untuk situasi ini. Namun, saya tidak suka tombol radio dirender.

Apakah mungkin mengubah ikon tombol radio? Misalnya, apakah mungkin untuk membuat tata letak khusus untuk setiap baris dan dalam tata letak itu merujuk ikon saya sendiri dan mengubah font dkk.

yamspog
sumber

Jawaban:

168

Ya, itu mungkin Anda harus menentukan gaya Anda sendiri untuk tombol radio, di 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' di sini harus berupa drawable stateful, 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>

Kemudian cukup terapkan tema Kustom ke seluruh aplikasi atau ke aktivitas pilihan Anda.

Untuk info lebih lanjut tentang tema dan gaya, lihat http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/ itu adalah panduan yang bagus.

Konstantin Burov
sumber
13
Anda juga bisa menyetel properti android: button pada tombol radio itu sendiri, daripada menentukan gaya kustom terpisah untuknya.
Yoni Samlan
7
Benar, tapi itu bukan praktik yang terlalu baik, karena Anda biasanya memiliki lebih dari satu tombol radio.
Konstantin Burov
@KonstantinBurov bagaimana jika saya menggunakan gambar 9 patch?
Hades
@KonstantinBurov Kecuali jika Anda menambahkan Tombol secara terprogram, dalam hal ini hebat :)
Cornholio
1
Untuk tema dukungan mungkin ingin menggunakan <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style / RadioButton </item> </style>
Dhruv Mevada
30

Anda dapat menempatkan gambar khusus di radiobutton seperti tombol normal. untuk itu buat satu file XML di folder drawable mis

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

Di sini Anda dapat menggunakan 3 gambar berbeda untuk tombol radio

dan gunakan file ini ke RadioButton seperti:

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

Cara yang lebih mudah untuk hanya mengubah tombol radio adalah dengan mengatur pemilih untuk hak drawable

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

Dan selektornya adalah:

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

Itu saja

topcbl
sumber
1
Solusi terbaik, untuk kasus saya, saya juga mengubah 'drawableRight' menjadi 'tombol' dan menambahkan beberapa padding ke pemilih xml
F-1
Ini solusi terbaik. Saya digunakan dengan cara ini dan berfungsi dengan baik. Tetapi setelah bermigrasi ke andoidx android: button = "@ null" tidak berfungsi dan kami melihat dua ikon tombol radio untuk setiap item! .
maniaq
1

ya .... `dari Xml

android:button="@drawable/yourdrawable" 

dan dari Jawa

myRadioButton.setButtonDrawable(resourceId or Drawable);

`

shweta jariya
sumber
0

Ini mungkin pendekatan cepat,

masukkan deskripsi gambar di sini

Dengan dua ikon yang ditunjukkan di atas, Anda akan mendapatkan RadioGroupsesuatu seperti ini

masukkan deskripsi gambar di sini

  • ubah RadioGrouporientasi menjadi horizontal
  • untuk masing-masing RadioButtonProperties, coba beri icon Button under CompoundButton,
  • sesuaikan Padding dan ukurannya,
  • dan setel atribut Background saat dicentang.
kolunar
sumber
0

Jika Anda ingin melakukannya secara terprogram,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
Abhishek Kumar
sumber