You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android如何实现支持单选的多行可选中文本视图(ChipGroup方案)

实现方案

第一步:调整ChipGroup基础配置,开启单选+自动换行

修改你现有ChipGroup的XML属性,添加单选和换行支持:

<com.google.android.material.chip.ChipGroup
    android:id="@+id/radio1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:orientation="horizontal"
    app:singleSelection="true" <!-- 开启单选模式,同一时间仅选中一个 -->
    app:allowChipWrap="true" <!-- 开启自动换行,实现多行布局 -->
    app:chipSpacingHorizontal="8dp" <!-- 横向Chip间距 -->
    app:chipSpacingVertical="8dp" <!-- 纵向行间距 -->
    app:checkedChip="@id/paris" <!-- 可选:设置默认选中项 -->
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView3">

需确保你的项目依赖的Material组件库版本不低于1.2.0,否则allowChipWrap属性不生效,可在module级build.gradle中确认依赖:

implementation 'com.google.android.material:material:1.9.0' // 可替换为最新稳定版

第二步:创建选中态样式Selector

分别创建文字颜色和背景的状态选择器,实现选中/未选中的样式切换:

2.1 文字颜色Selector

在res/color目录下新建chip_text_color.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FFFFFFFF" android:state_checked="true" /> <!-- 选中时白色文字 -->
    <item android:color="#D8000000" android:state_checked="false" /> <!-- 未选中时默认黑色文字 -->
</selector>

2.2 背景颜色Selector

在res/drawable目录下新建chip_bg_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FF2196F3" android:state_checked="true" /> <!-- 选中时背景色可自行替换 -->
    <item android:color="#FFEEEEEE" android:state_checked="false" /> <!-- 未选中时浅灰背景 -->
</selector>

第三步:给Chip应用样式

你可以直接给每个Chip添加属性,也可以统一封装成Style复用,单Chip配置示例如下:

<com.google.android.material.chip.Chip
    android:id="@+id/paris"
    style="@style/Widget.MaterialComponents.Chip.Choice" <!-- 选用选择类Chip样式,默认支持选中状态 -->
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/paris"
    android:textColor="@color/chip_text_color"
    app:chipBackgroundColor="@drawable/chip_bg_selector"
    app:chipCornerRadius="4dp" /> <!-- 可选:调整圆角大小匹配设计效果 -->

<!-- 其余5个Chip都按上面的样式配置即可 -->

如果要封装Style复用,可在res/values/styles.xml中添加自定义样式,之后每个Chip直接引用该style即可:

<style name="MySelectChipStyle" parent="Widget.MaterialComponents.Chip.Choice">
    <item name="android:textColor">@color/chip_text_color</item>
    <item name="chipBackgroundColor">@drawable/chip_bg_selector</item>
    <item name="chipCornerRadius">4dp</item>
    <item name="rippleColor">@android:color/transparent</item> <!-- 可选:去掉点击水波纹效果 -->
</style>

第四步:添加选中监听(可选,如有业务逻辑需要)

在Activity/Fragment中添加ChipGroup的选中监听,获取选中项做后续处理:

Kotlin示例:

radio1.setOnCheckedStateChangeListener { group, checkedIds ->
    if (checkedIds.isNotEmpty()) {
        val checkedChip = group.findViewById<Chip>(checkedIds.first())
        val selectedText = checkedChip.text.toString()
        // 处理选中逻辑
    }
}

Java示例:

radio1.setOnCheckedStateChangeListener((group, checkedIds) -> {
    if (!checkedIds.isEmpty()) {
        Chip checkedChip = group.findViewById(checkedIds.get(0));
        String selectedText = checkedChip.getText().toString();
        // 处理选中逻辑
    }
});

内容的提问来源于stack exchange,提问作者ANDROID

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:54:05