在MaterialButtonToggleGroup上需要单选

时间:2019-05-16 08:21:22

标签: android material-components-android

使用MaterialButtonToggleGroup时是否可以使app:singleSelection="true"处于必需的选定按钮的选项?

单击其他按钮时效果很好(取消了所有其他按钮的选择),但是单击同一按钮(已选择)时,它本身取消了选择,而我希望保持选中状态。

我的例子:

 <com.google.android.material.button.MaterialButtonToggleGroup
      android:layout_width="wrap"
      android:layout_height="wrap_content"
      app:singleSelection="true">

      <com.google.android.material.button.MaterialButton
        android:id="@+id/filterA"
        style="@style/Widget.MaterialComponents.Button.OutlinedButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A"/>

      <com.google.android.material.button.MaterialButton
        android:id="@+id/filterB"
        style="@style/Widget.MaterialComponents.Button.OutlinedButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B"/>

      <com.google.android.material.button.MaterialButton
        android:id="@+id/filterC"
        style="@style/Widget.MaterialComponents.Button.OutlinedButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="C"/>

    </com.google.android.material.button.MaterialButtonToggleGroup>

4 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,发现它正在与app:singleSelection="true"

一起使用
    String selectedValue = "Male";
    genderBtnToggle.addOnButtonCheckedListener(new MaterialButtonToggleGroup.OnButtonCheckedListener() {
        @Override
        public void onButtonChecked(MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
            MaterialButton btn = genderBtnToggle.findViewById(checkedId);
            if (!isChecked && btn.getText().toString().equals(selectedValue)) {
                genderBtnToggle.check(checkedId);
            }

            if (isChecked) {
                selectedValue = btn.getText().toString();
            }
        }
    });

答案 1 :(得分:1)

我通过以下方法进行工作:

toggle_group.addOnButtonCheckedListener { group, checkedId, isChecked ->
    if (group.checkedButtonId == -1) group.check(checkedId)
}

如果启用了singleSelection,则只有当用户单击已选中的按钮时,条件才会评估为true,从而不会选中任何按钮。发生这种情况时,我们只需要选中未选中的按钮即可。

答案 2 :(得分:0)

我也遇到了这个问题,将等待Google的永久修复。同时,我进行了以下操作以确保至少选中了一个按钮。

    final MaterialButtonToggleGroup tGroup = view.findViewById(R.id.toggleGroup);
    final MaterialButton breast = tGroup.findViewById(R.id.breast);
    final MaterialButton bottle = tGroup.findViewById(R.id.bottle);
    final MaterialButton solids = tGroup.findViewById(R.id.solids);

    View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tGroup.check(v.getId());
        }
    };

    breast.setOnClickListener(onClickListener);
    bottle.setOnClickListener(onClickListener);
    solids.setOnClickListener(onClickListener);

希望这会有所帮助。

答案 3 :(得分:0)

您可以使用 app:selectionRequired 属性在布局中对其进行定义:

    <com.google.android.material.button.MaterialButtonToggleGroup
        app:selectionRequired="true"
        app:checkedButton="@id/..."
        app:singleSelection="true">

您还可以使用方法 setSelectionRequired

buttonGroup.setSelectionRequired(true);

注意:这要求最低版本为 1.2.0-alpha03