我有一个 ConstraintLayout 作为根布局,这很好。
不过,我现在有一个 RadioGroup,我必须在其中创建两列 RadioButtons。
由于 ConstraintLayout 是为了摆脱嵌套布局,我认为将这些 RadioButtons 放在 RadioGroup 中并适当放置它们会很好。
事实证明,将 ConstraintLayout 作为根布局,包含 RadioGroup,似乎没有改变任何东西。
但也许我错了。
你们如何在 ConstraintLayout 内的 RadioGroup 中实现两行 RadioButton?
干杯
View
必须使用其直接父级的布局属性。例如,您不能将 RadioButton
与 layout_constraint
一起使用,因为直接父级是 RadioGroup
并且 RadioGroup
不知道如何解释这些属性。
RadioGroup
扩展了 LinearLayout
,因此单个 RadioGroup
所能做的最好的事情就是单行或单列 RadioButton
。您的布局中可以有两个 RadioGroup
,并且在 Java 代码中监听两者的更改。
private RadioGroup mGroup1; // init in onCreate
private RadioGroup mGroup2; // init in onCreate
private OnCheckedChangedListener mCheckListener = new OnCheckedChangedListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// To make it appear as if the two groups are one large group,
// checking something in either should clear the check in the other.
RadioGroup otherGroup = group == mGroup1 ? mGroup2 : mGroup1;
otherGroup.clearCheck();
// do something with checkedId
}
}
请访问https://github.com/samlu/ConstraintRadioGroup 可以与 ConstraintLayout 一起使用的 RadioGroup 小部件
blRadioGroup
小部件应该就是您正在寻找的。
我想出了一个简单的课程,让它变得非常简单。所有这些都在一个 java 文件中。这是一个“不受约束”的无线电组。您可以按照自己喜欢的方式布局单选按钮,将按钮添加到组中,它的作用就像单选组一样。
代码在这个要点UnboundRadioGroup,有完整的解释,但这里是它的用法:
如果不想使用匿名内部类,可以使用implements
public class MainActivity extends AppCompatActivity implements UnboundRadioGroup.OnClickListener
创建群组的方法有多种。
找到根Viewgroup
ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.content);
// create a radio group with the root viewgroup
UnboundRadioGroup unboundRadioGroup1 = new UnboundRadioGroup(this, viewGroup);
// don't forget to set a click listener for the group. Using implements in this case
unboundRadioGroup1.setOnClickListener(this);
或者使用根视图组的 id 创建一个单选组,无论您喜欢哪个。
UnboundRadioGroup unboundRadioGroup2 = new UnboundRadioGroup(this, android.R.id.content);
// add your click listener using an inner class
unboundRadioGroup2.setOnClickListener(new UnboundRadioGroup.OnClickListener()
{
@Override
public void OnClick(RadioButton radioButton)
{
Log.i("radioButton", radioButton.getTag().toString());
}
});
此方法手动将按钮添加到您的组中
unboundRadioGroup1.add((RadioButton) findViewById(R.id.radioButton1));
unboundRadioGroup1.add((RadioButton) findViewById(R.id.radioButton2));
此方法会根据 XML 中的 android:tag 属性自动将按钮添加到您的组中。请注意,如果您在代码中的其他位置需要标签,则不应使用此方法。但是,如果您不需要标签,您可以将多个单选按钮的标签设置为相同的名称,然后此方法将从它们创建一个组
unboundRadioGroup2.createGroupByTag("tag");
如果您使用实现而不是内部类,您的 Onclick 将设置如下:
@Override
public void OnClick(RadioButton radioButton)
{
Log.i("radioButton", radioButton.getTag().toString());
}
我找到了这个解决方案。将一些 LinearLayout 放入单选组内。 https://android-developers.narkive.com/BiJv4M1c/radiogroup-over-two-columns-or-rows