Радиогруппа 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.