Радиогруппа Android, разделитель между радиокнопками

Есть ли простой способ добавить разделитель между RadioButtons внутри RadioGroup? Я пытался использовать атрибут divider xml, и, похоже, он не работает. Если это уместно, RadioGroup в моем макете не содержит дочерних представлений; Я добавляю RadioButtons программно.

EDIT: проблема решена. Вы можете добавить представления помимо RadioButton внутри RadioGroup в xml. В моем случае вы также можете сделать это программно, но будьте осторожны с параметрами макета. У Акки была правильная идея, и это сработало для меня:

for (int i = 0; i < items.size(); i++) {
    if (i > 0) {
        // add a divider with height of 1 pixel
        View v = new View(this);
        v.setLayoutParams(new RadioGroup.LayoutParams(LayoutParams.MATCH_PARENT, 1));
        v.setBackgroundColor(android.R.color.darker_gray);
        mRadioGroup.addView(v);
    }
    RadioButton rb = new RadioButton(this);
    /* set other properties ... */

    mRadioGroup.addView(rb);
}

person Karakuri    schedule 22.05.2012    source источник
comment
Было бы полезно, если бы вы могли предоставить изображение того, что вы пытаетесь сделать.   -  person mtmurdock    schedule 22.05.2012
comment
группа переключателей получена из линейной компоновки, поэтому создайте объект представления и добавьте его после каждого переключателя, кроме последнего.   -  person Akram    schedule 22.05.2012
comment
mtmurdock: Мне просто нужна тонкая горизонтальная линия между каждым элементом. Акки: Я думал об этом, но надеялся, что есть что-то попроще. Это кажется настолько очевидным вариантом использования, что можно было бы ожидать, что Google предусмотрит его в своей структуре.   -  person Karakuri    schedule 22.05.2012


Ответы (4)


<RadioGroup
    android:id="@+id/location_radio_group"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="?android:attr/dividerHorizontal"
    android:showDividers="middle">
</RadioGroup>

Это сработает для вас. И мне действительно любопытно, как вы добавляете представление в групповое представление? Это должно вызвать classcastException, нет?

person smilingky    schedule 04.02.2014
comment
Это не работает для меня. Это не имеет никакого эффекта. Но если я определяю и назначаю свою собственную форму для android:divider для RadioGroup (а не отдельных кнопок) в файле xml, это работает. Кто-нибудь знает, почему? - person Alyoshak; 04.09.2018
comment
(Кстати, у меня это не сработало, пока я не добавил вертикальную ориентацию в свою RadioGroup) - person Bertrand; 16.07.2019

Вот обходной путь:

Сначала создайте Shape Drawable в качестве разделителя. Вот пример:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
<solid 
    android:color="@color/white" />
<stroke 
    android:width="0.3dp" 
    android:color="@color/black" />
</shape>

Это просто черная рамка. Поместите его в папку drawable/ и назовите что-то вроде custom_divider.xml.

Затем перейдите к макету, в котором используется RadioGroup. Используйте ShapeDrawable в качестве фона для каждого из RadioButton(ов). Вот пример:

<RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:divider="@color/black" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radiogroup_divider"
            android:checked="true"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radiogroup_divider"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radiogroup_divider"
            android:text="RadioButton" />

    </RadioGroup>

Вы также можете добавить ShapeDrawable в свою RadioGroup. Это зависит от вас, настройте его, если вам нужно. :)

Вот мой пример RadioGroup с настраиваемой границей (с угловым радиусом) и настраиваемыми разделителями ShapeDrawable(s). Разделитель RadioGroup

person KarenAnne    schedule 17.07.2013

Создайте рисуемую фигуру, представляющую разделитель (называемый «radio_group_divider»):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:width="12dp" />
    <solid android:color="@color/transparent" />
</shape>

Используйте этот рисунок как «разделитель» в RadioGroup:

<RadioGroup
        ...
        android:divider="@drawable/radio_group_divider"
        android:showDividers="middle"
        ...>
</RadioGroup>
person David    schedule 24.09.2013

Если вы создаете RadioGroup программно, то и разделители должны устанавливаться программно. Вы можете сделать это так:

RadioGroup radioGroup = new RadioGroup(getActivity()); //We create a new radio group
radioGroup.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
radioGroup.setDividerDrawable(getResources().getDrawable(android.R.drawable.divider_horizontal_textfield, getActivity().getTheme()));

...

Примечание. Эта часть кода работает во фрагменте. Поэтому, если вы хотите поместить его в действие, вам нужно изменить, изменив «getActivity ()» на «YourActivityName.this».

person Mustafa Karcıoğlu    schedule 26.08.2018