Kotlin中获取ImageView的srcCompat/background图片名称并赋值给TextView
获取ImageView的图片名称(兼容srcCompat和background)
我来帮你搞定这个需求!咱们得先明确:ImageView的图片可能来自srcCompat(对应代码里的setImageResource)或者background(对应setBackgroundResource),所以得分别处理这两种情况,把资源名称提取出来再设置到TextView里。
第一步:整理你的布局XML
先把你提供的布局代码格式化一下,方便查看:
<ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img900" tools:srcCompat="@drawable/img900" /> <TextView android:id="@+id/imagename" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" />
第二步:Kotlin核心实现
接下来写关键的逻辑代码,我分两部分来:先写个工具函数提取资源名称,再在页面里处理ImageView和TextView。
工具函数:根据资源ID获取名称
这个函数用来把资源ID转换成对应的名称(比如把R.drawable.img900转成img900):
fun getResourceName(resId: Int, context: Context): String? { return try { context.resources.getResourceEntryName(resId) } catch (e: Resources.NotFoundException) { // 资源无效时返回null,后面再处理兜底提示 null } }
在Activity中处理逻辑
以MainActivity为例,获取ImageView的两种资源ID,提取名称后设置到TextView:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val imageView = findViewById<ImageView>(R.id.imageview) val imageNameTv = findViewById<TextView>(R.id.imagename) // 获取srcCompat对应的资源ID val srcResId = imageView.imageResource // 获取background对应的资源ID val bgResId = imageView.backgroundResource // 优先取srcCompat的名称,没有的话再取background的 val imageName = when { srcResId != 0 -> getResourceName(srcResId, this) bgResId != 0 -> getResourceName(bgResId, this) else -> "无有效图片资源" } // 把名称设置到TextView,兜底处理null情况 imageNameTv.text = imageName ?: "无法识别图片名称" } }
关键说明
- 直接用
imageView.imageResource和imageView.backgroundResource获取资源ID,比通过Drawable转换的方式更可靠,毕竟这两个属性就是对应srcCompat和background的设置项。 getResourceEntryName会返回资源的纯名称(比如img900),如果资源ID无效会抛异常,所以加了try-catch做容错。- 优先级上我设置了先取
srcCompat的内容,如果你想优先取background,调整when语句的顺序就行。
这样就能完美兼容两种图片设置方式,把图片名称显示到指定TextView里啦!
内容的提问来源于stack exchange,提问作者koko
相关产品推荐
相关产品推荐

