单选按钮在一个单选组中 2 水平线

Radio Button in one radio group in 2 horizontal line

我尝试在 2 行的一个单选组中设置 4 个单选按钮,但问题是当我采用水平方向的线性布局时单选组功能不起作用。所有单选按钮 select 。一次只有一个按钮应该是 select。

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

                <RadioButton
                    android:id="@+id/r1"

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/lbl1" />

                <RadioButton
                    android:id="@+id/r2"

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/lbl2" />
            </LinearLayout>

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

                <RadioButton
                    android:id="@+id/r3"

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/lbl3" />

                <RadioButton
                    android:id="@+id/r4"

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/lbl4" />
            </LinearLayout>
        </RadioGroup>

RadioGroup 目前不允许嵌套布局。 (有关详细信息,请参阅 AOSP 问题 #8952)

因此,RadioButton 必须是父 RadioGroup 的直接子项。

既然如此,并且注意到 RadioGroup 扩展了 LinearLayout,我认为您不得不在一行或一列中列出所有单选按钮。

顺便说一句,没有什么可以阻止您创建自己的 RadioGroup 版本,它是从 RelativeLayout 等更灵活的东西扩展而来的。您可以从 RadioGroup 中的代码开始,然后根据您的需要对其进行调整。

我不知道你是否还需要另一个选项,但你可以 "force" 第二行使用这个:

  1. 设置 RadioGroup 的方向水平
  2. second 在相同的 "line"
  3. 中的 radioButtons 中设置相同的 marginTop
  4. third 在每个(2 和向前)的第一个元素上设置负数 marginStart 这将标记每行的星号,其他元素将跟随

这是一个例子:

 <RadioGroup
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:id="@+id/Rgroup">

 <RadioButton
   android:id="@+id/r1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/lbl1" />

   <RadioButton
   android:id="@+id/r2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/lbl2" />

  <RadioButton
   android:id="@+id/r3"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginStart="-180dp"
   android:layout_marginTop="40dp" 
   android:text="@string/lbl3" />

  <RadioButton
   android:id="@+id/r4"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginStart="0dp"
   android:layout_marginTop="40dp" 
   android:text="@string/lbl4" />

   </RadioGroup>

要使 RadioGroup 具有列,只需在其中添加 GridLayout 并更改 android:columnCount 参数。 但是,您必须覆盖所有单选按钮的 OnCheckedChangeListeners,因为当您将 RadioButtons 放入 GridLayout 时,它们不再分组。

<RadioGroup

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <GridLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnCount="3">

        <RadioButton
            android:id="@+id/rbtn_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

        <RadioButton
            android:id="@+id/rbtn_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

        .....


        </GridLayout>

    </RadioGroup>