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

Android开发:如何获取Chip组件的当前背景颜色?

获取Chip组件当前显示颜色的解决方案

Chip的chipBackgroundColor是ColorStateList类型,它会根据组件的状态(选中、禁用等)动态返回对应颜色,直接取defaultColor只能拿到默认状态的颜色,无法获取当前实际显示的颜色。可以通过以下方法获取当前状态对应的颜色:

核心思路

利用ColorStateList.getColorForState()方法,传入Chip当前的状态数组,就能得到该状态下的实际显示颜色。

修改后的代码实现

private fun handleSelection(chip: Chip) {
    val colorStateList = chip.chipBackgroundColor ?: return
    // 获取Chip当前的状态数组(包含选中、禁用等状态标识)
    val currentState = chip.drawableState
    // 根据当前状态获取对应颜色
    val currentColor = colorStateList.getColorForState(currentState, colorStateList.defaultColor)
    // 转换为十六进制颜色字符串(保留ARGB通道,若不需要透明度可去掉前两位)
    val hexColor = "#${Integer.toHexString(currentColor).uppercase()}"
    Log.d("BottomSheetFragment", hexColor)
}

代码说明

  • chip.drawableState:返回当前Chip的状态数组,比如选中时会包含android.R.attr.state_checked标识
  • getColorForState(currentState, default):如果当前状态在ColorStateList中有匹配的颜色则返回对应值,否则返回默认颜色
  • 十六进制转换时用uppercase()可以让结果更规范,若不需要透明度,可将Integer.toHexString(currentColor).substring(2)来去掉Alpha通道的两位字符

另外,如果你是在setOnCheckedChangeListener的回调中处理,也可以直接通过isChecked参数来指定状态数组,比如:

chip.setOnCheckedChangeListener { buttonView, isChecked ->
    val colorStateList = buttonView.chipBackgroundColor ?: return@setOnCheckedChangeListener
    val targetState = if (isChecked) intArrayOf(android.R.attr.state_checked) else intArrayOf()
    val currentColor = colorStateList.getColorForState(targetState, colorStateList.defaultColor)
    // 后续处理颜色
}

这种方式更直接,但只适用于仅关注选中状态的场景,第一种方法能适配更多状态(比如禁用+选中的组合状态)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:45:32