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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:08:38