如何总是强制 MaterialButtonToggleGroup 像RadioGroup一样,始终具有至少一个选定的项目?设置setSingleSelection(true)
还会增加以下可能性:如果您在组中的“按钮”上单击两次,则没有任何选择。
这是我的代码:
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="wrap_content"
android:layout_height="wrap_content"
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_width="wrap_content"
android:layout_height="wrap_content"
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” 时,如果我单击一个已经选中的按钮,它也会取消选中该按钮,而不会在组中选中任何按钮。
答案 0 :(得分:11)
从1.2.0-alpha03开始,您可以简单地使用get_theme_mod
选项:
selectionRequired
答案 1 :(得分:7)
重写toggle()
类的MaterialButton
方法并使用它代替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 :(得分:7)
现在,您可以使用 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
答案 3 :(得分:1)
如果您真的想这样做,可以在Kotlin中以这种方式进行。
toggle_group.forEach { button ->
button.setOnClickListener { (button as MaterialButton).isChecked = true }
}
这将防止第二次单击取消选中。
答案 4 :(得分:0)
使用您需要在MaterialButtonToggleGroup
app:singleSelection="true"
我正在使用implementation 'com.google.android.material:material:1.1.0-alpha06'
尝试一下
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/toggle_button_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:singleSelection="true">
<com.google.android.material.button.MaterialButton
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A" />
<com.google.android.material.button.MaterialButton
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B" />
<com.google.android.material.button.MaterialButton
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C" />
<com.google.android.material.button.MaterialButton
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D" />
</com.google.android.material.button.MaterialButtonToggleGroup>
更新
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
app:backgroundTint="@color/colorBlue"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/BottomSheetDialog_fromFragmentBottomSheetSort_Sort_ToggleButtonGroup_Descending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
app:backgroundTint="@color/colorBlue"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
</com.google.android.material.button.MaterialButtonToggleGroup>