Чи можна змінити піктограму перемикача в групі перемикачів Android


95

Я хочу дозволити користувачеві мого андроїд-додатку можливість встановлювати деякі параметри. Перемикач ідеально підходить для цієї ситуації. Однак мені не подобається відображати перемикачі.

Чи можна змінити піктограму перемикача? Наприклад, чи можна створити власний макет для кожного рядка і в цьому макеті посилатися на мою власну піктограму та змінювати шрифт та ін.

Відповіді:


168

Так, можливо, вам потрібно визначити свій власний стиль для перемикачів у 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.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>

Тоді просто застосуйте спеціальну тему або до цілого додатка, або до дій на ваш вибір.

Для отримання додаткової інформації про теми та стилі див. Http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/, що є хорошим посібником.


13
Ви також можете просто встановити властивість android: button на самій перемикачі, а не визначати для неї окремий власний стиль.
Йоні Самлан

7
Правда, але це не надто хороша практика, оскільки зазвичай у вас більше одного перемикача.
Костянтин Буров

@KonstantinBurov що, якщо я використовую зображення з 9 патчами?
Аїд

@KonstantinBurov, якщо ви не додаєте кнопки програмно, і в цьому випадку це чудово :)
Корнхоліо

1
Для підтримки теми можна використовувати <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style / RadioButton </item> </style>
Друв Мевада,

30

Ви можете розмістити власне зображення в перемикачі, як звичайна кнопка. для цього створіть один XML-файл у папці, яку можна малювати, наприклад

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

Тут ви можете використовувати 3 різні зображення для перемикача

і використовувати цей файл для RadioButton, як:

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

13

Більш простий спосіб змінити лише перемикач - це просто встановити селектор, який можна малювати праворуч

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

І селектор:

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

Це все


1
Найкраще рішення, для мого випадку я також змінив 'drawableRight' на 'button' і додав трохи заповнення до селектора xml
F-1,

Це найкраще рішення. Мене використовували таким чином, і він працює нормально. Але після переходу на andoidx android: button = "@ null" не працює, і ми бачимо дві піктограми перемикача для кожного елемента! .
maniaq


0

Ось, мабуть, швидкий підхід,

введіть тут опис зображення

З двома піктограмами, показаними вище, у вас вийде RadioGroupщось подібне

введіть тут опис зображення

  • змінити RadioGroup орієнтацію 'на горизонтальну
  • для RadioButtonвластивостей кожного, спробуйте вказати піктограму Button підCompoundButton ,
  • відрегулюйте прокладку та розмір,
  • і встановіть атрибут Background, якщо встановлено прапорець.

0

Якщо ви хочете зробити це програмно,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.