gpt4 book ai didi

java - 如何让 ChipGroup 像 radioGroup 一样工作?

转载 作者:行者123 更新时间:2023-11-29 22:47:09 25 4
gpt4 key购买 nike

如何使 ChipGroupradioButton 一样工作,在更改背景颜色的同时可以一次选择一个项目。

Image Screenshot

我看到了this link对于这样的事情,但它对我没有帮助,因为我正在使用 layoutInflater 来显示我的芯片项目。

firebaseFirestore.collection("Categories").addSnapshotListener((queryDocumentSnapshots, e) -> {
for (DocumentChange doc: queryDocumentSnapshots.getDocumentChanges()){
if (doc.getType() == DocumentChange.Type.ADDED){
Categories categories = doc.getDocument().toObject(Categories.class);
post_list.add(categories);
Chip chip = (Chip) getLayoutInflater().inflate(R.layout.chip_item_layout, chipGroup, false);
chip.setText(categories.getTitle());
chipGroup.addView(chip);
chipGroup.setOnCheckedChangeListener((chipGroup, id) -> {
Chip chip2 = ((Chip) chipGroup.getChildAt(chipGroup.getCheckedChipId()));
if (chip2 != null) {
for (int i = 0; i < chipGroup.getChildCount(); ++i) {
chipGroup.getChildAt(i).setClickable(true);
chip2.setChipBackgroundColorResource(R.color.customOrange);
}
chip2.setClickable(false);
}
});

}
}
});

最佳答案

在您的 ChipGroup 中使用 app:singleSelection="true"属性。通过这种方式,ChipGroup 可以配置为一次只允许检查一个芯片

<com.google.android.material.chip.ChipGroup
app:singleSelection="true"
..>

然后您可以使用布局 chip_item_layout.xml 中的 app:chipBackgroundColor 属性设置选择器颜色。

类似于:

<com.google.android.material.chip.Chip
style="@style/Widget.MaterialComponents.Chip.Choice"
app:chipBackgroundColor="@color/chip_background_color"
..>

注意 style="@style/Widget.MaterialComponents.Chip.Choice" 因为它将芯片定义为 android:checkable="true".

chip_background_color 是一个选择器,您可以在其中定义不同状态下您喜欢的颜色。它是默认选择器,您可以更改它:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 24% opacity -->
<item android:alpha="0.24" android:color="?attr/colorPrimary" android:state_enabled="true" android:state_selected="true"/>
<item android:alpha="0.24" android:color="?attr/colorPrimary" android:state_enabled="true" android:state_checked="true"/>
<!-- 12% of 87% opacity -->
<item android:alpha="0.10" android:color="?attr/colorOnSurface" android:state_enabled="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface"/>

</selector>

所选芯片由颜色定义,在您的情况下是第一行 (android:state_selected="true")。

如果您想以编程方式进行,只需使用(OnCheckedChangeListener中)setChipBackgroundColorResource方法。

chip.setChipBackgroundColorResource(R.color.chip_background_color);

enter image description here

此外,如果您想要要求至少进行一次选择,您可以使用app:selectionRequired 属性。此属性需要 1.2.0(从 1.2.0-alpha02 开始)

关于java - 如何让 ChipGroup 像 radioGroup 一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com