我怎样才能强制 ChipGroup
像 RadioGroup
一样总是至少有一个选定的项目?设置 setSingleSelection(true)
还增加了如果您在 Chip
上单击两次则没有任何选择的可能性。
原文由 adriennoir 发布,翻译遵循 CC BY-SA 4.0 许可协议
我怎样才能强制 ChipGroup
像 RadioGroup
一样总是至少有一个选定的项目?设置 setSingleSelection(true)
还增加了如果您在 Chip
上单击两次则没有任何选择的可能性。
原文由 adriennoir 发布,翻译遵循 CC BY-SA 4.0 许可协议
随着版本 1.2.0-alpha02
不再需要 旧 的 hacky 解决方案!
要么使用属性 app:selectionRequired="true"
<com.google.android.material.chip.ChipGroup
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:selectionRequired="true"
app:singleSelection="true">
(...)
</com.google.android.material.chip.ChipGroup>
或者在代码中
// Kotlin
group.isSelectionRequired = true
// Java
group.setSelectionRequired(true);
有两个步骤可以实现这一点
我们内置了此支持,只需确保将 app:singleSelection="true"
添加到您的 ChipGroup
,例如:
XML
<com.google.android.material.chip.ChipGroup
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:singleSelection="true">
<com.google.android.material.chip.Chip
android:id="@+id/option_1"
style="@style/Widget.MaterialComponents.Chip.Choice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Option 1" />
<com.google.android.material.chip.Chip
android:id="@+id/option_2"
style="@style/Widget.MaterialComponents.Chip.Choice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Option 2" />
</com.google.android.material.chip.ChipGroup>
代码
// Kotlin
group.isSingleSelection = true
// Java
group.setSingleSelection(true);
现在支持类似功能的广播组:
var lastCheckedId = View.NO_ID
chipGroup.setOnCheckedChangeListener { group, checkedId ->
if(checkedId == View.NO_ID) {
// User tried to uncheck, make sure to keep the chip checked
group.check(lastCheckedId)
return@setOnCheckedChangeListener
}
lastCheckedId = checkedId
// New selection happened, do your logic here.
(...)
}
从 文档:
ChipGroup 还支持一组芯片的多重排除范围。当您设置 app:singleSelection 属性时,选中属于芯片组的一个芯片会取消选中同一组中任何先前选中的芯片。该行为反映了 RadioGroup 的行为。
原文由 Joaquim Ley 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答963 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答840 阅读✓ 已解决
2 回答949 阅读
2 回答889 阅读
1 回答823 阅读
2 回答692 阅读
为防止取消选择所有芯片,您可以使用方法
setSelectionRequired
:您还可以使用
app:selectionRequired
属性在布局中定义它:注意: 这需要至少 1.2.0 版本