ConstraintLayout,RadioGroup和两列RadioButton

时间:2016-11-09 02:08:03

标签: android android-layout android-radiogroup android-radiobutton android-constraintlayout

我有一个ConstraintLayout作为根布局,没关系 但是我现在有一个RadioGroup,我必须在其中制作两列RadioButtons。 由于ConstraintLayout是关于摆脱嵌套布局,我认为将那些RadioButton放入RadioGroup并将它们放置得恰当。 原来将ConstraintLayout作为根布局,包含RadioGroup,似乎没有任何改变。
但也许我错了。

你们如何在一个RadioGroup中获得两行RadioButton,这是在ConstraintLayout中?

干杯

4 个答案:

答案 0 :(得分:2)

View必须使用其直接父级的布局属性。例如,您不能RadioButtonlayout_constraint,因为直接父级是RadioGroupRadioGroup不知道如何解释这些属性。

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
    }
}

答案 1 :(得分:0)

我想出了一个简单的课程,让它变得非常简单。它只在一个java文件中。它是一个不受约束的"广播组。您可以根据需要布置单选按钮,将按钮添加到组中,它就像一个radioGroup。

代码位于此要点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());
    }

答案 2 :(得分:0)

请访问https://github.com/samlu/ConstraintRadioGroup 可与ConstraintLayout一起使用的RadioGroup小部件

blRadioGroup小部件应该是您想要的。

答案 3 :(得分:0)

自定义RadioGroup扩展了ConstraintLayout is available at Github

您可以导入库并使用小部件ConstraintRadioGroup