ConstraintLayout、RadioGroup和两列RadioButton

ConstraintLayout, RadioGroup and two columns of RadioButton

我有一个 ConstraintLayout 作为根布局,没问题。
但是我现在有一个 RadioGroup,我必须在其中制作两列 RadioButtons。 由于 ConstraintLayout 是关于摆脱嵌套布局,我认为将这些 RadioButtons 放在 RadioGroup 中并适当放置它们会很好。
原来有一个 ConstraintLayout 作为根布局,包含 RadioGroup,似乎没有改变任何东西。
但也许我错了。

你们如何实现在 ConstraintLayout 内的 RadioGroup 中有两行 RadioButton?

干杯

Views 必须使用其直接父级的布局属性。例如,您不能将 RadioButtonlayout_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