Android如何通过字符串名称获取drawable目录下的图片资源
问题描述
我现在持有drawable文件夹下资源对应的字符串名称,希望访问drawable文件夹获取对应资源,用于修改Icon View的展示内容。
现有资源名称列表示例如下:val iconList = ["ic_apple","ic_banana","ic_melon"]且
ic_apple.png、ic_banana.png、ic_melon.png均已存放在我的drawable文件夹中。
参考Java实现代码如下:String name = "your_drawable"; int id = getResources().getIdentifier(name, "drawable", getPackageName()); Drawable drawable = getResources().getDrawable(id); view.setBackground(drawable)请问该如何实现对应需求?
实现方案
核心逻辑是通过getIdentifier方法用资源名称查询对应的资源ID,再加载Drawable设置给View即可,以下是适配全版本系统的实现代码:
Kotlin 实现
val iconList = listOf("ic_apple", "ic_banana", "ic_melon") // 按需取对应资源名称,此处以第一个ic_apple为例 val targetIconName = iconList[0] // 查询资源ID val resId = resources.getIdentifier(targetIconName, "drawable", packageName) if (resId != 0) { // 找不到对应资源时resId会返回0,提前判断避免崩溃 // ContextCompat加载Drawable自带主题兼容,适配所有系统版本 val targetDrawable = ContextCompat.getDrawable(this@YourActivity, resId) // 设置View背景 yourIconView.background = targetDrawable // 如果是ImageView要设置前景图标,用下方写法 // (yourIconView as ImageView).setImageDrawable(targetDrawable) }
注意事项:
- 如果在Fragment中调用,需要通过上下文获取资源:
requireContext().resources.getIdentifier(...) - 如果在非组件类中调用,需要传入合法的Context实例再执行资源查询
Java 实现
List<String> iconList = Arrays.asList("ic_apple", "ic_banana", "ic_melon"); // 此处以第二个元素ic_banana为例 String targetIconName = iconList.get(1); int resId = getResources().getIdentifier(targetIconName, "drawable", getPackageName()); if (resId != 0) { Drawable targetDrawable = ContextCompat.getDrawable(YourActivity.this, resId); yourIconView.setBackground(targetDrawable); // ImageView设置图标的写法 // ((ImageView)yourIconView).setImageDrawable(targetDrawable); }
小提示:getIdentifier 会执行资源查询逻辑,性能比直接用R.drawable.xxx调用低,如果是固定的资源列表建议提前把ID存在集合里,避免重复查询
内容的提问来源于stack exchange,提问作者Polaris Nation
相关产品推荐
相关产品推荐

