Is there a simple way to add a divider between RadioButtons
inside a RadioGroup
? I've tried using the divider
xml attribute and it doesn't seem to be working. In case it's relevant, the RadioGroup
in my layout does not contain any child views; I'm adding the RadioButtons
programmatically.
EDIT: Problem solved. You can add views besides RadioButton
inside RadioGroup
in the xml. In my case, you can also do it programmatically, but be careful about your layout params. Akki had the right idea, and this worked for me:
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);
}
<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>
That will work for you. And I am really curious how you add view into Group View? That should cause classcastexception, no ?
Here's a workaround:
First create a Shape Drawable as your divider. Here is an example:
<?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>
This is just a simple black border. Put it inside your drawable/ folder and name it something like custom_divider.xml.
Then, go to your layout which uses a RadioGroup. Use the ShapeDrawable as a background for each of the RadioButton(s). Here is an example:
<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>
You can also add a ShapeDrawable to your RadioGroup. It depends on you, customize it if you need. :)
Here is my example of a RadioGroup with custom border (with corner radius) and custom divider ShapeDrawable(s).
Create shape drawable that represents divider (Called "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>
Use this drawable as "divider" in the RadioGroup:
<RadioGroup
...
android:divider="@drawable/radio_group_divider"
android:showDividers="middle"
...>
</RadioGroup>
If you create RadioGroup programmatically, then you have to set dividers programmatically too. You can do it like that:
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()));
...
Note: This code part is working in a fragment. So if you want to put it in to an activity, you have to modify by changing "getActivity()" with "YourActivityName.this"