我正在使用芯片列表,我希望这些芯片可以被选择,因此查看https://material.io/develop/android/components/chip/后,我发现我可以使用“Choice Chip”。
由于我需要动态创建和添加,因此我必须配置特定的颜色、颜色涟漪等。
所以我需要配置的是:
val chip = Chip(context, null, R.style.CustomChipChoice)
chip.isClickable = true
chip.isCheckable = true
chip.isCheckedIconVisible=false
chip.height = ScreenUtils.dpToPx(40)
chip.chipCornerRadius = (ScreenUtils.dpToPx(20)).toFloat()
chip.chipStrokeWidth = (ScreenUtils.dpToPx(2)).toFloat()
chip.setTextAppearanceResource(R.style.ChipTextStyle)
return chip
我尝试使用 R.style.CustomChipChoice
实现如下效果:
自定义 ChipChoice 样式
<style name="CustomChipChoice" parent="@style/Widget.MaterialComponents.Chip.Choice">
<item name="chipBackgroundColor">@color/background_color_chip_state_list</item>
<item name="chipStrokeColor">@color/background_color_chip_state_list</item>
<item name="rippleColor">@color/topic_social_pressed</item>
</style>
背景色芯片状态列表
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/topic_social_selected" android:state_checked="true" />
<item android:color="@color/topic_social_pressed" android:state_pressed="true" />
<item android:color="@color/topic_unselected_background" />
</selector>
`stroke_color_chip_state_list
`<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/topic_social_pressed" android:state_checked="true"/>
<item android:color="@color/grey_material2" android:state_checked="false"/>
</selector>
正如您所见,我使芯片可点击和可选中(隐藏我不需要的复选标志)。
但是当我测试它时,颜色未设置。芯片只是默认颜色(灰度)。
在哪里可以应用这个自定义样式?
P.S:
我进行了快速测试,以查看我的CustomStyle是否存在格式问题等等。
我通过xml添加了一个视图,它完全正常工作...
<android.support.design.chip.Chip
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/CustomChipChoice"
android:checkable="true"
android:clickable="true"
app:checkedIconVisible="false"
android:text="Chip Test"/>
com.google.android.material.chip
中定义的setChipDrawable
方法中找到了chipDrawable.setShouldDrawText(false);
。不确定为什么 TextView 被以这种方式实现,可以通过编程方式进行编辑。源代码中的注释说:“将绘制文本和 ChipDrawable 渲染其他部分(例如芯片/检查/关闭图标)委托给 TextView”。 - Sreehari