Добавление пользовательских переключателей в android
Я пытаюсь получить эффект радиообъекта для обычных кнопок в android
У меня есть простой переключатель для Android ниже
![enter image description here]()
Код для этого:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="RadioButton1" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton2" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton3" />
</RadioGroup>
</RelativeLayout>
Как настроить его, как показано ниже:
![enter image description here]()
Спасибо!
[EDIT], используя код из одного из ответов
![enter image description here]()
Но имя кнопки омрачено опцией выбора, как ее удалить?
{EDIT} больше изменений
Финальные изменения должны, по крайней мере, я должен знать, какую кнопку я выбрал из трех переключателей... можно ли получить как ниже?
![enter image description here]()
Ответы
Ответ 1
Добавьте выделение фона, ссылающееся на изображение или селектор (например, ниже), и сделайте кнопку прозрачной:
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/yourbuttonbackground"
android:button="@android:color/transparent"
android:checked="true"
android:text="RadioButton1" />
Если вы хотите, чтобы ваши переключатели имели другой ресурс, когда он установлен, создайте выделение фона селектора:
Рез/рисуем/yourbuttonbackground.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/b"
android:state_checked="true"
android:state_pressed="true" />
<item
android:drawable="@drawable/a"
android:state_pressed="true" />
<item
android:drawable="@drawable/a"
android:state_checked="true" />
<item
android:drawable="@drawable/b" />
</selector>
В селекторе выше мы ссылаемся на два чертежа, a
и b
, здесь, как мы их создаем:
res/drawable/a.xml - Выбранное состояние
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners
android:radius="5dp" />
<solid
android:color="#fff" />
<stroke
android:width="2dp"
android:color="#53aade" />
</shape>
res/drawable/b.xml - Регулярное состояние
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners
android:radius="5dp" />
<solid
android:color="#fff" />
<stroke
android:width="2dp"
android:color="#555555" />
</shape>
Подробнее о drawables здесь: http://developer.android.com/guide/topics/resources/drawable-resource.html
Ответ 2
Использовать тот же формат XML файла из ответа Evan, но для форматирования вам нужен только один извлекаемый файл.
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/custom_button_background"
android:button="@android:color/transparent"
android:checked="true"
android:text="RadioButton1" />
И ваш отдельный файл:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" >
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#333333" />
<solid android:color="#cccccc" />
</shape>
</item>
<item android:state_checked="true">
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#333333" />
<solid android:color="#cccccc" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#cccccc" />
<solid android:color="#ffffff" />
</shape>
</item>
</selector>
Ответ 3
Вы должны заполнить атрибут "Button" класса CompoundButton с помощью пути для рисования XML (my_checkbox).
В XML-чертеже вы должны иметь:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="false" android:drawable="@drawable/checkbox_not_checked" />
<item android:state_checked="true" android:drawable="@drawable/checkbox_checked" />
<item android:drawable="@drawable/checkbox_not_checked" /> <!-- default -->
</selector>
Не забудьте заменить my_checkbox на ваше имя файла флажком, checkbox_not_checked на ваш PNG-код, который является вашим флажком, если он не установлен, и checkbox_checked с вашим изображением, когда оно будет проверено.
Для размера непосредственно обновите параметры макета.
Ответ 4
Чтобы скрыть переключатель по умолчанию, я предлагаю удалить кнопку вместо того, чтобы сделать его прозрачным, так как вся визуальная обратная связь обрабатывается извлекаемым фоном:
android:button="@null"
Также было бы лучше использовать стили, так как есть несколько переключателей:
<RadioButton style="@style/RadioButtonStyle" ... />
<style name="RadioButtonStyle" parent="@android:style/Widget.CompoundButton">
<item name="android:background">@drawable/customButtonBackground</item>
<item name="android:button">@null</item>
</style>
Вам понадобится Seslyn customButtonBackground.
Ответ 5
Лучший способ добавить пользовательский способ:
<RadioButton
android:id="@+id/radiocar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:button="@drawable/yourbuttonbackground"
android:checked="true"
android:drawableRight="@mipmap/car"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="yourtexthere"/>
Теневой оверлей с помощью пользовательского drawable удаляется здесь.
Ответ 6
Простой способ попробовать это
-
Создайте новый макет в выпадающей папке и назовите его custom_radiobutton (вы также можете переименовать)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="false"
android:drawable="@drawable/your_radio_off_image_name" />
<item android:state_checked="true"
android:drawable="@drawable/your_radio_on_image_name" />
</selector>
-
Используйте это в своей деятельности макета
<RadioButton
android:id="@+id/radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/custom_radiobutton"/>
Ответ 7
Ниже приведен пример пользовательского переключателя. выполните следующие шаги.
-
Xml файл.
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5">
<TextView
android:id="@+id/text_gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:gravity="center"
android:text="@string/gender"
android:textColor="#263238"
android:textSize="15sp"
android:textStyle="normal"
/>
<TextView
android:id="@+id/text_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:gravity="center"
android:text="@string/male"
android:textColor="#263238"
android:textSize="15sp"
android:textStyle="normal"/>
<RadioButton
android:id="@+id/radio_Male"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_gravity="right|center_vertical"
android:layout_marginRight="4dp"
android:button="@drawable/custom_radio_button"
android:checked="true"
android:text=""
android:onClick="onButtonClicked"
android:textSize="15sp"
android:textStyle="normal"
/>
</FrameLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.6">
<RadioButton
android:id="@+id/radio_Female"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_gravity="right|center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="0dp"
android:button="@drawable/custom_female_button"
android:text=""
android:onClick="onButtonClicked"
android:textSize="15sp"
android:textStyle="normal"/>
<TextView
android:id="@+id/text_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:gravity="center"
android:text="@string/female"
android:textColor="#263238"
android:textSize="15sp"
android:textStyle="normal"/>
<RadioButton
android:id="@+id/radio_Other"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginRight="10dp"
android:button="@drawable/custom_other_button"
android:text=""
android:onClick="onButtonClicked"
android:textSize="15sp"
android:textStyle="normal"/>
<TextView
android:id="@+id/text_other"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:layout_marginRight="34dp"
android:gravity="center"
android:text="@string/other"
android:textColor="#263238"
android:textSize="15sp"
android:textStyle="normal"/>
</FrameLayout>
</LinearLayout>
2.add пользовательский xml для переключателей
2.1.другие доступные
custom_other_button.xml
<item android:state_checked="true" android:drawable="@drawable/select_radio_other" />
<item android:state_checked="false" android:drawable="@drawable/default_radio" />
2.2.измененный женский
custom_female_button.xml
<item android:state_checked="true" android:drawable="@drawable/select_radio_female" />
<item android:state_checked="false" android:drawable="@drawable/default_radio" />
2,3. мужской вытягиваемый
custom_radio_button.xml
<item android:state_checked="true" android:drawable="@drawable/select_radio_male" />
<item android:state_checked="false" android:drawable="@drawable/default_radio" />
- Выход:
это экран вывода
Ответ 8
Я понимаю, что это запоздалый ответ, но, глядя через developer.android.com, кажется, что кнопка Toggle идеально подходит для вашей ситуации.
http://developer.android.com/guide/topics/ui/controls/togglebutton.html
И, конечно же, вы все равно можете использовать другие предложения для получения фонового рисунка, чтобы получить желаемый пользовательский вид.
<ToggleButton
android:id="@+id/togglebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/custom_button_background"
android:textOn="On"
android:textOff="Off"
/>
Теперь, если вы хотите перейти к окончательному редактированию и иметь эффект "ореола" вокруг ваших кнопок, вы можете использовать другой настраиваемый селектор, чтобы сделать именно это.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" > <!-- selected -->
<shape>
<solid
android:color="@android:color/white" />
<stroke
android:width="3px"
android:color="@android:color/holo_blue_bright" />
<corners
android:radius="5dp" />
</shape>
</item>
<item> <!-- default -->
<shape>
<solid
android:color="@android:color/white" />
<stroke
android:width="1px"
android:color="@android:color/darker_gray" />
<corners
android:radius="5dp" />
</shape>
</item>
</selector>
Ответ 9
Привет, вот современный способ сделать то, что вы хотите.
Создайте тему здесь, в идеале, с самого начала проекта.
Android Holo Colors Generator
Затем вы увидите, как это делается и можете настроить его, как хотите.
Наслаждайтесь!