【问题标题】:ConstraintLayout, RadioGroup and two columns of RadioButtonConstraintLayout、RadioGroup和两列RadioButton
【发布时间】:2017-03-22 19:31:02
【问题描述】:

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

你们如何实现在一个 RadioGroup 中拥有两行 RadioButton,它位于一个 ConstraintLayout 中?

干杯

【问题讨论】:

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


    【解决方案1】:

    Views 必须使用其直接父级的布局属性。例如,您不能将RadioButtons 与layout_constraints 一起使用,因为直接父级是RadioGroupRadioGroup 不知道如何解释这些属性。

    RadioGroup 扩展了LinearLayout,因此使用单个RadioGroup 可以做的最好的事情是RadioButtons 的单行或单列。你可以在你的布局中有两个RadioGroups,并在你的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
        }
    }
    

    【讨论】:

    • group1 来自哪里:RadioGroup otherGroup = group == group1 ? mGroup2 : mGroup1; ?
    • @AndyStrife 这是一个错字。固定。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我想出了一个简单的类,让它变得非常容易。这一切都在一个java文件中。这是一个“未绑定”的广播组。您可以随意布局单选按钮,将按钮添加到组中,它的作用就像一个 radioGroup。

      代码在这个要点UnboundRadioGroup,有完整的解释,但这里是它的用法:

      如果不想使用匿名内部类,可以使用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");
      

      如果您使用的是实现而不是内部类,您的 Onclick 将设置如下:

      @Override
          public void OnClick(RadioButton radioButton)
          {
              Log.i("radioButton", radioButton.getTag().toString());
          }
      

      【讨论】:

        【解决方案4】:

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

        blRadioGroup 小部件应该是您正在寻找的。​​p>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多