【问题标题】:Android radiogroup, divider between radiobuttonsAndroid radiogroup,单选按钮之间的分隔符
【发布时间】:2012-05-29 04:17:54
【问题描述】:

有没有一种简单的方法可以在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:我只需要在每个项目之间设置一条细水平线。 Akki:我想过这个,但希望有更简单的东西。这似乎是一个相当明显的用例,以至于人们会期望 Google 在框架内为其做出规定。

标签: android radio-button radio-group divider


【解决方案1】:
<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,不是吗?

【讨论】:

  • 这对我不起作用。它没有效果。但是,如果我在 xml 文件中为 RadioGroup(而不是单个按钮)定义并分配我自己的 android:divider 形状,它就可以工作。有人知道为什么吗?
  • (顺便说一句,这对我不起作用,直到我向 RadioGroup 添加了一个垂直方向)
【解决方案2】:

这里有一个解决方法:

首先创建一个 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(s) 的背景。这是一个例子:

<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)。

【讨论】:

    【解决方案3】:

    创建表示分隔线的可绘制形状(称为“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>
    

    【讨论】:

      【解决方案4】:

      如果您以编程方式创建 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”来修改

      【讨论】:

        猜你喜欢
        • 2014-04-30
        • 2017-11-05
        • 2014-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多