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

如何通过变量设置Android中ImageView的src属性?

解决Android中通过图片名称字符串设置ImageView的src属性问题

这问题我之前开发时也碰到过,确实一开始会因为setImageResource()只接受int类型的资源ID卡壳,不过用Android系统提供的资源标识符方法就能完美解决!

核心解决方案:使用getResources().getIdentifier()

这个方法可以根据你传入的资源名称、类型和包名,返回对应的资源ID,之后就能直接传给setImageResource()了。

Java代码示例:

// 你的扑克牌图片名称(不带.png后缀)
String nameOfCard = "two_of_diamonds";

// 获取对应的drawable资源ID
int resourceId = getResources().getIdentifier(nameOfCard, "drawable", getPackageName());

// 务必检查资源是否存在,避免因无效ID导致崩溃
if (resourceId != 0) {
    imageView.setImageResource(resourceId);
} else {
    // 资源不存在时的降级处理,比如设置一张默认卡牌图
    imageView.setImageResource(R.drawable.default_card);
}

Kotlin代码示例:

val nameOfCard = "two_of_diamonds"
val resourceId = resources.getIdentifier(nameOfCard, "drawable", packageName)

if (resourceId != 0) {
    imageView.setImageResource(resourceId)
} else {
    imageView.setImageResource(R.drawable.default_card)
}

参数详细说明

  • 第一个参数:nameOfCard,就是你drawable文件夹里的图片文件名不要加扩展名(比如.png),系统会自动匹配对应的资源文件。
  • 第二个参数:"drawable",指定资源的类型是drawable目录下的资源。
  • 第三个参数:getPackageName()(Java)/packageName(Kotlin),获取当前应用的包名,这样系统能精准定位到你的应用资源,比硬编码包名更灵活(如果是在非Activity类中,需要传入Context对象,用context.getPackageName())。

关键注意事项

  1. 文件名大小写敏感:Android的资源文件名区分大小写,必须和drawable文件夹里的文件名完全一致(比如Two_Of_Diamonds和two_of_diamonds会被识别为不同资源)。
  2. 处理资源不存在的情况:如果传入的名称有误,getIdentifier()会返回0,直接调用setImageResource(0)会引发崩溃,所以一定要加判断逻辑。
  3. 避免硬编码包名:不要直接写死你的应用包名(比如com.your.package),用系统提供的方法获取包名,适配不同的构建环境。

内容的提问来源于stack exchange,提问作者Olegario López

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:18:09