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

Android开发:如何获取ImageView所用Drawable XML文件的名称

获取ImageView使用的Drawable XML文件名的方法

这个需求其实挺常见的,不过默认情况下Android的Drawable对象本身并不会保存它对应的原始XML文件名,不过我们有两种可行的方案来实现,具体看你的Drawable是怎么设置的:

方案1:通过资源ID反向获取文件名

如果你的ImageView的Drawable是通过XML布局的android:src属性或者代码中setImageResource()方法设置的,这种情况可以直接通过ImageView的资源ID反向查询文件名:

ImageView imageView = findViewById(R.id.your_image_view);
int drawableResId = imageView.getImageResource();

if (drawableResId != 0) { // 0表示没有设置资源ID
    // 获取不带后缀的资源名称(比如a.xml会返回"a")
    String drawableName = getResources().getResourceEntryName(drawableResId);
    // 如果需要完整的文件名,手动拼接后缀即可
    String fullXmlFileName = drawableName + ".xml";
    // 这里就可以把fullXmlFileName存为字符串使用了
}

这个方法很可靠,因为ImageView会记录你设置的资源ID,不需要处理Drawable的包装类(比如AppCompat相关的DrawableWrapper)。

方案2:手动标记文件名(处理动态设置的Drawable)

如果你的Drawable是通过**setImageDrawable()**动态设置的(比如从本地文件加载、或者代码动态生成的Drawable),这时候ImageView的getImageResource()会返回0,没法通过资源ID获取文件名。这时候我们可以在设置Drawable的同时,把文件名存到ImageView的tag属性里:

设置Drawable时标记文件名:

// 比如加载R.drawable.b这个XML Drawable
Drawable targetDrawable = AppCompatResources.getDrawable(this, R.drawable.b);
imageView.setImageDrawable(targetDrawable);
// 把对应的XML文件名存到tag里
imageView.setTag("b.xml");

获取文件名时:

String drawableXmlFileName = (String) imageView.getTag();

注意事项

  • 如果你的Drawable是完全通过代码动态生成的(比如用代码创建的ShapeDrawable、GradientDrawable),本身没有对应的XML文件,这种情况就不存在文件名,需要提前判断这种边界场景。
  • 如果你用的是AppCompatImageView,上述两种方案都完全兼容,不需要额外处理。

内容的提问来源于stack exchange,提问作者Mahadi Hasan Sunny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:10:41