在android中从名称而不是id获取资源

Posted

技术标签:

【中文标题】在android中从名称而不是id获取资源【英文标题】:Getting resource from name instead of id in android 【发布时间】:2011-10-28 03:40:14 【问题描述】:

我有以下代码用于使用名称而不是 id 获取资源:

spec = new ImageView[56];
for (i=2; i<=56; i++) 
    String s = null;
    s = "items_r"+Integer.toString(i)+"_c1";
    spec[i] = (ImageView) findViewById(getResources().getIdentifier(s,"drawable",getPackageName()));
    Log.e(tag, Boolean.toString(spec[i] == null));

我的可绘制文件夹中有 56 个项目,名为 items_r1_c1 到 items_r56_c1; 但我将 spec[i] 设为空。 有人可以指出我的错误以及如何纠正它吗? 谢谢。

【问题讨论】:

【参考方案1】:

试试这个

int id = findViewById(getResources().getIdentifier(s,"drawable",getPackageName());
spec[i] = (new ImageView()).setImageResource(id);

【讨论】:

【参考方案2】:

findViewById(int) 用于查找已膨胀且当前存在于您的 Activity 内容视图下的 Views。

您需要使用Resources.getDrawable(int)ImageView.setImageResource(int)

spec = new ImageView[56];
for (i=2; i<=56; i++) 
    String res = "items_r" + Integer.toString(i) + "_c1";
    int resId = getResources().getIdentifier(res, "drawable", getPackageName());
    spec[i] = new ImageView();
    // Drawable image = getResources.getDrawable(resId);
    // spec[i].setImageDrawable(image);
    spec[i].setImageResource(resId);
    Log.e(tag, Boolean.toString(spec[i] == null));

【讨论】:

以上是关于在android中从名称而不是id获取资源的主要内容,如果未能解决你的问题,请参考以下文章

如何获取具有已知资源名称的资源 id?

如何在 Flutter 中从 Firebase 获取当前用户 ID

如何在Android中从名称或纬度获取PlaceID?

Android 用字符串资源名称获取int型资源id的几种方式

java 从资源字体获取颜色:https://stackoverflow.com/questions/31590714/getcolorint-id-deprecated-on-android-6-0

如何按实例名称获取 GCP 计费? (不是按类型)资源和计费 sku id 之间是不是存在关联?