ConstraintLayout、RadioGroup和两列RadioButton
ConstraintLayout, RadioGroup and two columns of RadioButton
我有一个 ConstraintLayout 作为根布局,没问题。
但是我现在有一个 RadioGroup,我必须在其中制作两列 RadioButtons。
由于 ConstraintLayout 是关于摆脱嵌套布局,我认为将这些 RadioButtons 放在 RadioGroup 中并适当放置它们会很好。
原来有一个 ConstraintLayout 作为根布局,包含 RadioGroup,似乎没有改变任何东西。
但也许我错了。
你们如何实现在 ConstraintLayout 内的 RadioGroup 中有两行 RadioButton?
干杯
View
s 必须使用其直接父级的布局属性。例如,您不能将 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
}
}
我想出了一个简单的 class,这让事情变得非常简单。所有这些都在一个 java 文件中。这是一个 "unbound" 广播组。您可以按照自己喜欢的方式布置单选按钮,将按钮添加到组中,它就像一个 radioGroup。
代码在这个要点UnboundRadioGroup,有完整的解释,但这里是它的用法:
如果不想使用匿名内部class,可以使用implements
public class MainActivity extends AppCompatActivity implements UnboundRadioGroup.OnClickListener
有几种创建群组的方法。
找到根视图组
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");
如果您使用的是工具而不是内部 class,您的 Onclick 将设置如下:
@Override
public void OnClick(RadioButton radioButton)
{
Log.i("radioButton", radioButton.getTag().toString());
}
请访问https://github.com/samlu/ConstraintRadioGroup
可以与 ConstraintLayout
一起使用的 RadioGroup 小部件
blRadioGroup
小部件应该是您正在寻找的。
自定义 RadioGroup
扩展 ConstraintLayout
is available at Github
您可以导入库并使用小部件ConstraintRadioGroup
我有一个 ConstraintLayout 作为根布局,没问题。
但是我现在有一个 RadioGroup,我必须在其中制作两列 RadioButtons。
由于 ConstraintLayout 是关于摆脱嵌套布局,我认为将这些 RadioButtons 放在 RadioGroup 中并适当放置它们会很好。
原来有一个 ConstraintLayout 作为根布局,包含 RadioGroup,似乎没有改变任何东西。
但也许我错了。
你们如何实现在 ConstraintLayout 内的 RadioGroup 中有两行 RadioButton?
干杯
View
s 必须使用其直接父级的布局属性。例如,您不能将 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
}
}
我想出了一个简单的 class,这让事情变得非常简单。所有这些都在一个 java 文件中。这是一个 "unbound" 广播组。您可以按照自己喜欢的方式布置单选按钮,将按钮添加到组中,它就像一个 radioGroup。
代码在这个要点UnboundRadioGroup,有完整的解释,但这里是它的用法:
如果不想使用匿名内部class,可以使用implements
public class MainActivity extends AppCompatActivity implements UnboundRadioGroup.OnClickListener
有几种创建群组的方法。
找到根视图组
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");
如果您使用的是工具而不是内部 class,您的 Onclick 将设置如下:
@Override
public void OnClick(RadioButton radioButton)
{
Log.i("radioButton", radioButton.getTag().toString());
}
请访问https://github.com/samlu/ConstraintRadioGroup 可以与 ConstraintLayout
一起使用的 RadioGroup 小部件blRadioGroup
小部件应该是您正在寻找的。
自定义 RadioGroup
扩展 ConstraintLayout
is available at Github
您可以导入库并使用小部件ConstraintRadioGroup