我如何安排 RadioButtons?

How do I arrange RadioButtons?

我在一个 RadioGroup 中有 4 个 RadioButton,如下所示:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button1"
            android:text="Button 1"/>

        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button2"
            android:text="Button 2"/>

        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button3"
            android:text="Button 3"/>

        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button4"
            android:text="Button 4"/>

    </RadioGroup>

</RelativeLayout>

我希望 RadioButton 2 在 RadioButton 1 的右侧,我希望 RadioButton 3 在 RadioButton 1 的下方,我希望 RadioButton 4 在 RadioButton 3 的右侧。

普通属性如

android:layout_below=""

android:layout_toRightOf""

不适用于单选按钮。我怎样才能按照上面XML中描述的方式放置单选按钮?

我建议您不要在 RadioGroup 中使用嵌套的嵌套布局 (Linear/Relative) 来增加视图层次结构。此外,您不会使用嵌套布局获得单选功能。 RadioGroup 实际上扩展了 LinearLayout。所以它只有垂直或水平排列单选按钮的能力。在这里我分享了 link RelativeRadioGroup 我的库实际上是一个 RelativeRadioGroup,因此您可以根据需要安排 RadioButtons。

试试下面的代码,

    <RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

          <LinearLayout
             android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:oriendtation="horizontal"/>

  <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button1"
            android:text="Button 1"/>

        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button2"
            android:text="Button 2"/>


 </LinearLayout>



    <LinearLayout
             android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:oriendtation="horizontal"/>


        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button3"
            android:text="Button 3"/>

        <RadioButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/button4"
            android:text="Button 4"/>


 </LinearLayout>

希望对您有所帮助。

解决方案 1:使用 LinearLayout

  1. LinearLayout 添加为 RadioGroup 的直接子项,并使用 android:orientation="vertical" 赋予其 vertical 方向。
  2. LinearLayout 上面添加另外两个 LinearLayoutandroid:orientation="horizontal"android:weightSum="2"
  3. button1button2放入第一个水平LinearLayout并将button3button4放入第二个水平LinearLayout.
  4. 使用属性 android:layout_weight="1" 赋予全部 4 buttons 权重 1

试试这个:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:weightSum="2">

                <RadioButton
                    android:id="@+id/button1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Button 1"/>

                <RadioButton
                    android:id="@+id/button2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Button 2"/>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:weightSum="2">

                <RadioButton
                    android:id="@+id/button3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Button 3"/>

                <RadioButton
                    android:id="@+id/button4"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Button 4"/>
            </LinearLayout>

        </LinearLayout>
    </RadioGroup>

</RelativeLayout>

输出:

解决方案 2:使用 RelativeLayout

  1. RelativeLayout 添加为 RadioGroup 的直接子代,并将所有 RadioButton 放入此 RelativeLayout 中。
  2. 将属性 android:layout_toRightOf="@id/button1" 添加到 button2 以显示 button1right
  3. 将属性 android:layout_below="@id/button1" 添加到 button3 以显示 button1below
  4. 将属性 android:layout_toRightOf="@id/button3"android:layout_alignBottom="@id/button3" 添加到 button4 使其显示在 button3 的右侧。

尝试一下:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <RadioButton
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Button 1"/>

            <RadioButton
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/button1"
                android:text="Button 2"/>

            <RadioButton
                android:id="@+id/button3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/button1"
                android:text="Button 3"/>

            <RadioButton
                android:id="@+id/button4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/button3"
                android:layout_alignBottom="@id/button3"
                android:text="Button 4"/>

        </RelativeLayout>
    </RadioGroup>

</RelativeLayout>

输出:

仅供参考, 您可以根据需要在 buttons 之间使用 paddingmargin

希望对你有所帮助~

你可以试试这个

<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:ignore="NewApi">



<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button1"
            android:text="Button 1"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button2"
            android:text="Button 2"
            android:layout_toRightOf="@+id/button1"/>
    </RelativeLayout>


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button3"
            android:text="Button 3"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button4"
            android:text="Button 4"
            android:layout_toRightOf="@+id/button3"/>
    </RelativeLayout>

</RadioGroup>