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

如何在代码中解析?android:attr/selectableItemBackground属性值

解析Android属性?android:attr/selectableItemBackground的完整方案

你已经完成了属性解析的第一步,接下来只需要把TypedValue转换成可用的Drawable对象或者资源ID就行,我给你详细拆解:

1. 获取对应的Drawable资源

你已经通过resolveAttribute拿到了TypedValue,现在只需要用这个TypedValue里的resourceId来获取系统Drawable:

val typedValue = TypedValue()
// 注意这里要用android.R.attr.selectableItemBackground,不是自定义的R.attr
context.theme.resolveAttribute(android.R.attr.selectableItemBackground, typedValue, true)

// 获取兼容低版本的Drawable对象
val selectableBackground = ContextCompat.getDrawable(context, typedValue.resourceId)

用ContextCompat.getDrawable是为了兼容低版本Android系统,避免API版本差异导致的崩溃或效果缺失。

2. 直接获取资源ID(如果需要)

如果你只需要这个背景对应的资源ID,直接提取TypedValue的resourceId字段即可:

val backgroundResId = typedValue.resourceId

这个ID就是系统定义的item_background_material.xml对应的资源ID,你可以用它直接设置给View的前景:

yourCardView.foreground = selectableBackground
// 或者直接用资源ID设置
yourCardView.foregroundResource = backgroundResId

为什么你之前拿到的是字符串路径?

typedValue.string返回的是资源的字符串表示(比如res/drawable/item_background_material.xml),这是TypedValue的一种输出格式,但对于实际开发来说,我们更需要的是resourceId——它能直接和Android的资源系统交互,是更实用的结果。

这样操作后,你就能完全解析这个系统属性,拿到可用的点击波纹背景资源了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:07