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
相关产品推荐
相关产品推荐

