1

我在MaterialButton内部使用MaterialButtonToggleGroup

<com.google.android.material.button.MaterialButtonToggleGroup
    android:id="@+id/majors_toggleGroup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp">

    <com.google.android.material.button.MaterialButton
        android:id="@+id/cs_button"
        style="@style/Widget.MaterialComponents.Button.OutlinedButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"                //doesn't work
        android:text="CS" />

    ...

该 arrtributeandroid:checked不起作用,我可以使用setCheck()in Activityor Fragment,但要使用 DataBniding 我必须使用 XML 属性。有什么帮助吗?

4

2 回答 2

1

最后,我必须使用BindingAdapter函数来实现这个功能。

1. 创建BindingAdapter函数:

object DataBindingUtil {
    @BindingAdapter("checkedIndexes")        //custom attribute
    @JvmStatic
    fun setChecked(toggleGroup: MaterialButtonToggleGroup, checkedIndexes: List<Int>) {
        checkedIndexes.forEach {
            (toggleGroup.getChildAt(it) as MaterialButton).isChecked = true
        }
    }
}

2. 适用于MaterialButtonToggleGroup

<com.google.android.material.button.MaterialButtonToggleGroup
    android:id="@+id/majors_toggleGroup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    app:checkedIndexes="@{viewModel.majorIndexes}">    //here, multi-selection for now
于 2020-12-02T15:23:15.717 回答
0

要在一组按钮中默认将初始状态设置MaterialButton为选中按钮,您可以通过app:checkedButtonMaterialButtonToggleGroup

因此,在您的代码中:

<com.google.android.material.button.MaterialButtonToggleGroup
    android:id="@+id/majors_toggleGroup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:checkedButton="@+id/cs_button" 
    android:layout_marginTop="8dp">

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

    ...

您也可以查看文档

于 2020-12-02T00:57:42.970 回答