Android单选按钮组,单选按钮之间的分隔符

27
有没有一种简单的方法在RadioGroup中的RadioButtons之间添加分隔符?我尝试使用divider xml属性,但似乎没有起作用。如果相关的话,我的布局中的RadioGroup不包含任何子视图;我是通过编程方式添加RadioButtons的。
编辑:问题已解决。在xml中可以在RadioGroup内添加除RadioButton以外的视图。在我的情况下,你也可以通过编程方式实现,但要小心布局参数。Akki有正确的想法,这对我很有效。
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);
}

如果您可以提供您要制作的内容的图像,那将会很有帮助。 - mtmurdock
4
单选框组是从线性布局派生而来的,因此创建一个视图对象,并将其添加到除最后一个单选按钮之外的每个单选按钮后面。 - Akram
mtmurdock:我只需要在每个项目之间有一条细的水平线。Akki:我也想到了这个,但希望有更简单的方法。这似乎是一个相当明显的用例,人们期望Google在框架内为其提供支持。 - Karakuri
4个回答

37
<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>

那对您有用。我非常好奇您如何将视图添加到组视图中?那不会导致类转换异常吗?


这对我不起作用。它没有任何效果。但是,如果我在xml文件中为RadioGroup(而不是单个按钮)定义和分配自己的android:divider形状,则可以正常工作。有人知道原因吗? - Alyoshak
(顺便说一句,直到我在RadioGroup中添加了一个垂直方向,这个方法对我并没有起作用) - Bertrand

16

这里有一个解决方法:

首先,创建一个形状可绘制对象作为您的分隔符。以下是一个示例:

<?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的布局。为每个RadioButton使用ShapeDrawable作为背景。以下是一个示例:

<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中。这取决于您,如果需要,请自定义它。 :)

这是我带有自定义边框(带有角半径)和自定义分隔符ShapeDrawable的RadioGroup示例。 RadioGroup divider


7
创建代表分隔符的形状可绘制对象(称为“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中的“divider”:

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

0
如果你以编程方式创建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”进行修改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接