Как указать 3 кнопки, у которых есть рабочий механизм, аналогичный переключателю [duplicate]

Всякий раз, когда вам нужно динамически обращаться к ресурсу, вы должны использовать квадратную скобку для доступа к свойству, а не «.». оператор Синтаксис: object [propery}

const something = { bar: "Foobar!" };
const foo = 'bar';
// something.foo; -- not correct way at it is expecting foo as proprty in  something={ foo: "value"};
// correct way is  something[foo]
alert( something[foo])

91
задан Devrath 3 October 2013 в 18:21
поделиться

9 ответов

Добавьте выделение фона, ссылающееся на изображение или селектор (например, ниже), и сделайте кнопку прозрачной:

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

Если вы хотите, чтобы ваши переключатели имели другой ресурс, когда

res / drawable / 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 - Regular State

<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

181
ответ дан Evan Bashir 21 August 2018 в 09:42
поделиться
  • 1
    Эй, спасибо, я получил функциональность ... Но имя кнопки переписывается с помощью опции выбора ..... как удалить это ... сохранение функциональности нетронутым .... Все, что я пытаюсь достичь как i показал в моем вопросе ... Любые дальнейшие направления! [Примечание: посмотрите обновленный вопрос] – Devrath 3 October 2013 в 17:41
  • 2
    @Unicorn Добавьте android:button="@android:color/transparent", чтобы удалить его. – Evan Bashir 3 October 2013 в 18:16
  • 3
    @Unicorn Да, я понимаю. Все, что вам нужно сделать, это создать селектор, как я уже сказал в своем ответе. Вы бы создали две возможности рисования. Один для обычного стиля кнопки и один для стиля нажатой кнопки. Я обновлю свой код с кодом для этих чертежей. – Evan Bashir 3 October 2013 в 18:27
  • 4
    Чтобы поместить текст вместо перекрытия, установите кнопку с возможностью рисования, а не фон, и убедитесь, что это 9-патч с точками растяжения и областями содержимого, указанными в соответствии с текстом. – Lance Nanek 27 February 2014 в 15:27
  • 5
    Нормальное поведение для RadioButton, вы ищете флажок? – Vincent D. 17 May 2016 в 15:38

Лучший способ добавить пользовательский вариант:

 <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 удаляется здесь.

3
ответ дан Abhilasha Sharma 21 August 2018 в 09:42
поделиться
  • 1
    Спасибо @ Абхилаша. – varotariya vajsi 22 November 2016 в 14:02
  • 2
    Я тоже выбрал этот вариант над background. Если вы установите фон, вы не можете добавить текст в RadioButton, и вам нужно разместить собственный TextView – voghDev 12 December 2016 в 07:54

Я понимаю, что это запоздалый ответ, но, глядя через developer.android.com, кажется, что кнопка Toggle идеально подходит для вашей ситуации.

Toggle button image [/g1] 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>
32
ответ дан amithgc 21 August 2018 в 09:42
поделиться
  • 1
    Будет ли это по-прежнему разрешать поведение переключателя в том случае, если одна кнопка отмечена, любые другие неконтролируемы? – LarsH 11 March 2015 в 16:47
  • 2
    Спасибо за это ... это выглядит полезно. Все еще работаю над этим. Имя drawable, customButtonBackground, не допускается иметь в нем верхний регистр - по крайней мере, это то, что мне говорит Android Studio. – LarsH 11 March 2015 в 16:53

Чтобы скрыть переключатель по умолчанию, я предлагаю удалить кнопку вместо того, чтобы сделать ее прозрачной, так как вся визуальная обратная связь обрабатывается извлекаемым фоном:

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 drawable тоже.

3
ответ дан Community 21 August 2018 в 09:42
поделиться

Вы должны заполнить атрибут «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 на ваше имя файла флажка drawable, checkbox_not_checked с помощью вашего PNG-файла, который является вашим флажком, когда он не установлен, и checkbox_checked с ваше изображение, когда оно проверено.

Для размера непосредственно обновите параметры макета.

7
ответ дан flchaux 21 August 2018 в 09:42
поделиться
  • 1
    Я считаю, что OP хотел бы текст внутри кнопки. Я думаю, что единственный способ сделать это - применить drawable к android:background по сравнению с android:button; затем объявить android:button прозрачным. Таким образом, текст может находиться внутри кнопки. – Evan Bashir 3 October 2013 в 17:17

Ниже приведен пример пользовательского переключателя. выполните следующие шаги.

  1. 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.other drawable 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.female drawable 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. male drawable 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" />
    
    Выход: это экран вывода
1
ответ дан sachin pangare 21 August 2018 в 09:42
поделиться

Простой способ попробовать это

  1. Создайте новый макет в папке с возможностью переноса и назовите его 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>
    
  2. Используйте это в своей макете
    <RadioButton
     android:id="@+id/radiobutton"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:button="@drawable/custom_radiobutton"/>
    
2
ответ дан Sunil 21 August 2018 в 09:42
поделиться
35
ответ дан amithgc 1 November 2018 в 04:03
поделиться
0
ответ дан Annu 1 November 2018 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: