ConstraintLayout、RadioGroup 和两列RadioButton

问题描述 投票:0回答:5

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

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

干杯

android android-layout android-radiogroup android-radiobutton android-constraintlayout
5个回答
5
投票

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

2
投票

可以在 Github 上获取扩展

RadioGroup
的自定义 
ConstraintLayout

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

ConstraintRadioGroup


1
投票

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

blRadioGroup
小部件应该就是您正在寻找的。


0
投票

我想出了一个简单的课程,让它变得非常简单。所有这些都在一个 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());
    }

0
投票

我找到了这个解决方案。将一些 LinearLayout 放入单选组内。 https://android-developers.narkive.com/BiJv4M1c/radiogroup-over-two-columns-or-rows

© www.soinside.com 2019 - 2024. All rights reserved.