单选按钮在一个单选组中 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" 第二行使用这个:
- 设置 RadioGroup 的方向水平
- second 在相同的 "line"
中的 radioButtons 中设置相同的 marginTop
- 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>
我尝试在 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" 第二行使用这个:
- 设置 RadioGroup 的方向水平
- second 在相同的 "line" 中的 radioButtons 中设置相同的 marginTop
- 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>