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

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

РЕДАКТИРОВАТЬ: проблема решена. Вы можете добавить виды помимо 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);
}

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>

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

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

Сначала создайте 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).Радиогруппа делитель

Создайте форму для рисования, которая представляет разделитель (называется "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>

Используйте этот drawable в качестве "делителя" в RadioGroup:

<RadioGroup
        ...
        android:divider="@drawable/radio_group_divider"
        android:showDividers="middle"
        ...>
</RadioGroup>

Если вы создаете 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.

Другие вопросы по тегам