如何通过变量设置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())。
关键注意事项
- 文件名大小写敏感:Android的资源文件名区分大小写,必须和drawable文件夹里的文件名完全一致(比如
Two_Of_Diamonds和two_of_diamonds会被识别为不同资源)。 - 处理资源不存在的情况:如果传入的名称有误,
getIdentifier()会返回0,直接调用setImageResource(0)会引发崩溃,所以一定要加判断逻辑。 - 避免硬编码包名:不要直接写死你的应用包名(比如
com.your.package),用系统提供的方法获取包名,适配不同的构建环境。
内容的提问来源于stack exchange,提问作者Olegario López
相关产品推荐
相关产品推荐

