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

Jetpack Compose Icon能否加载Selector XML文件?

Jetpack Compose Icon加载Selector XML的问题

是的,Jetpack Compose的Icon组件无法直接通过painterResource加载Selector XML文件。painterResource仅支持矢量Drawable(VectorDrawable)和PNG、JPG这类光栅化资源,不支持StateListDrawable(也就是你编写的Selector文件),这就是你遇到崩溃报错的原因。

下面是两种可行的解决方案:

方案一:利用Compose状态管理切换Painter

Compose是声明式UI,直接根据状态选择对应的Drawable资源即可,逻辑和原生Selector一致:

// 定义选中状态
var isSelected by remember { mutableStateOf(false) }

Icon(
    painter = painterResource(
        id = if (isSelected) {
            R.drawable.ic_baseline_back_hand_24
        } else {
            R.drawable.ic_outline_back_hand_24
        }
    ),
    contentDescription = "返回手势图标",
    modifier = Modifier.clickable {
        // 点击切换状态
        isSelected = !isSelected
    }
)

方案二:用AndroidView包装原生ImageView

如果想直接复用已有的Selector资源,可以通过AndroidView嵌入原生ImageView,这样就能正常使用Selector的状态切换逻辑:

var isSelected by remember { mutableStateOf(false) }

AndroidView(
    factory = { context ->
        ImageView(context).apply {
            setImageResource(R.drawable.ic_back_hand_24_selector)
            setOnClickListener { isSelected = !isSelected }
        }
    },
    update = { imageView ->
        // 同步Compose状态到原生View
        imageView.isSelected = isSelected
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:54:23