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

Android如何根据随机选中的神明名称自动匹配res对应drawable图片资源

实现方案

你之前的写法不可行的核心原因是:R.drawable是Android编译阶段生成的静态常量类,不支持运行时动态拼接变量读取资源ID,需要通过系统提供的Resources.getIdentifier()方法动态根据资源名称获取对应ID。

完整实现代码

final String[] godslist = {"Achilles", "Agni", "Ah Muzen Cab", "Ah Puch", "Amaterasu", "Anhur", "Anubis", "Ao Kuang", "Aphrodite", "Apollo", "Arachne", "Ares", "Artemis", "Artio"};

final ImageView godImage = findViewById(R.id.godImage);
final TextView godName = findViewById(R.id.nameOfGod);

int randomGod = (int) (Math.random() * godslist.length); // 建议直接用数组长度,避免后续新增元素后还要改数字
String selectedGod = godslist[randomGod];
godName.setText(selectedGod);

// 转换为资源命名:全小写+去除所有空格
String resName = selectedGod.toLowerCase().replaceAll(" ", "");
// 动态获取drawable图片资源ID
int drawableResId = getResources().getIdentifier(resName, "drawable", getPackageName());

if (drawableResId != 0) { // getIdentifier找不到资源会返回0
    godImage.setImageResource(drawableResId);
} else {
    // 兜底:找不到资源时显示默认占位图
    godImage.setImageResource(R.drawable.default_placeholder);
}

音频资源匹配逻辑

音频资源放在res/raw目录下,命名规则和图片保持一致,只需修改getIdentifier的资源类型参数即可复用逻辑:

int audioResId = getResources().getIdentifier(resName, "raw", getPackageName());
if (audioResId != 0) {
    // 示例:使用MediaPlayer播放音频
    MediaPlayer mediaPlayer = MediaPlayer.create(this, audioResId);
    mediaPlayer.start();
    // 记得在页面销毁时调用mediaPlayer.release()回收资源
}

注意事项

  • 资源命名必须和转换后的resName完全匹配,例如Ah Muzen Cab转换后为ahmuzencab,对应drawable下的图片必须命名为ahmuzencab.jpg
  • 如果代码写在Fragment中,需要替换为requireContext().getResources()和requireContext().getPackageName()获取上下文相关参数
  • 建议始终增加资源不存在的兜底判断,避免出现界面异常

内容的提问来源于stack exchange,提问作者Dodek750

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:03