材质按钮切换组单选
Posted
技术标签:
【中文标题】材质按钮切换组单选【英文标题】:Material Button Toggle Group single selection 【发布时间】:2019-11-27 03:55:27 【问题描述】:如何强制 MaterialButtonToggleGroup 像 RadioGroup 一样始终具有至少一个选定项目?设置setSingleSelection(true)
还会增加在组中单击两次按钮时不选择任何内容的可能性。
这是我的代码:
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup"
android:layout_
android:layout_
app:singleSelection="true"
app:checkedButton="@+id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Ascending">
<com.google.android.material.button.MaterialButton
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Ascending"
android:layout_
android:layout_
android:text="@string/Fragment_BottomSheetDialog_Sort_ToggleButton_Ascending"
app:backgroundTint="@color/custom_button_background_states"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
<com.google.android.material.button.MaterialButton
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Descending"
android:layout_
android:layout_
android:text="@string/Fragment_BottomSheetDialog_Sort_ToggleButton_Descending"
app:backgroundTint="@color/custom_button_background_states"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
</com.google.android.material.button.MaterialButtonToggleGroup>
如您所见,即使在使用 app:singleSelection="true" 时,如果我单击已选中的按钮,它也会取消选中它,在组中没有选中任何按钮。
【问题讨论】:
你试过app:singleSelection="true"
吗,因为对我来说它工作正常
我在上面说过我正在使用 app:singleSelection="true" 并且当我单击该按钮两次时,它取消选中该按钮。
【参考方案1】:
更新:
app:selectionRequired="true"
属性自 1.2.0 版起可用
覆盖MaterialButton
类的toggle()
方法并使用它代替MaterialButton
import android.content.Context
import android.util.AttributeSet
import com.google.android.material.button.MaterialButton
class CustomMaterialToggleButton : MaterialButton
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun toggle()
if (!isChecked)
super.toggle()
这将确保已选中的按钮在单选时不会取消选中。
【讨论】:
【参考方案2】:从1.2.0-alpha03 开始,您可以简单地使用selectionRequired
选项:
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/toggle_button_group"
app:singleSelection="true"
app:selectionRequired="true">
</com.google.android.material.button.MaterialButtonToggleGroup>
【讨论】:
【参考方案3】:现在您可以使用 app:selectionRequired
属性来实现它。
比如:
<com.google.android.material.button.MaterialButtonToggleGroup
app:singleSelection="true"
app:selectionRequired="true"
app:checkedButton="@id/..."
..>
您也可以通过编程方式使用方法setSelectionRequired
:
buttonGroup.setSelectionRequired(true);
请注意,此属性需要最低版本 1.2.0-alpha03
【讨论】:
【参考方案4】:如果你真的想这样做,你可以在 Kotlin 中这样做。
toggle_group.forEach button ->
button.setOnClickListener (button as MaterialButton).isChecked = true
这将防止第二次点击取消选中。
【讨论】:
以上是关于材质按钮切换组单选的主要内容,如果未能解决你的问题,请参考以下文章