Android MaterialButton Set Check in XML for DataBinding

Posted

技术标签:

【中文标题】Android MaterialButton Set Check in XML for DataBinding【英文标题】: 【发布时间】:2021-03-13 23:15:30 【问题描述】:

我在MaterialButtonToggleGroup 中使用MaterialButton

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

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

    ...

arrtribute android:checked 不起作用,我可以在ActivityFragment 中使用setCheck(),但要使用DataBniding,我必须使用XML 属性。有什么帮助吗?

【问题讨论】:

能不能换成app:checked看看 @Zain 它无法编译。 【参考方案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_
    android:layout_
    android:layout_marginTop="8dp"
    app:checkedIndexes="@viewModel.majorIndexes">    //here, multi-selection for now

【讨论】:

【参考方案2】:

要将MaterialButton 的初始状态设置为一组按钮中默认选中的按钮,您可以通过在MaterialButtonToggleGroup 中引用app:checkedButton 中的按钮ID 来完成此操作

所以,在你的代码中:

<com.google.android.material.button.MaterialButtonToggleGroup
    android:id="@+id/majors_toggleGroup"
    android:layout_
    android:layout_
    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_
        android:layout_
        android:text="CS" />

    ...

您也可以查看documentation。

【讨论】:

感谢您的回答,但这是一种“硬代码”,不太适合我的情况。

以上是关于Android MaterialButton Set Check in XML for DataBinding的主要内容,如果未能解决你的问题,请参考以下文章

Android MaterialButton使用详解,告别shapeselector

Android MaterialButton使用详解,告别shapeselector

如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton

如何在kotlin android的MaterialButton中获取背景颜色

Android MaterialButton Set Check in XML for DataBinding

drawableLeft图标和文本之间的Android MaterialButton填充