尝试从Android中的名称获取可绘制的资源ID

时间:2015-01-03 22:52:21

标签: android android-xml android-resources android-drawable

我有一个像这样的资源文件:

的strings.xml

<string name="category01">My Category 01</string>
<string name="category02">My Category 02</string>
<string name="category03">My Category 03</string>

<string-array name="array_category_01">
    <item name="title">@string/category01</item>
    <item name="image">@drawable/img01</item>
</string-array>

<string-array name="array_category_02">
    <item name="title">@string/category02</item>
    <item name="image">@drawable/img02</item>
</string-array>

<string-array name="array_category_03">
    <item name="title">@string/category03</item>
    <item name="image">@drawable/img03</item>
</string-array>

<string-array name="categories_array">
    <item>@array/array_category_01</item>
    <item>@array/array_category_02</item>
    <item>@array/array_category_03</item>
</string-array>

注意:@ drawable / img01,@ drawable / img02和@ drawable / img03是png图片位于res \ drawable文件夹

稍后我执行以下迭代来检索类别 - 图像对:

    Resources res = this.context.getResources();
    TypedArray ta = res.obtainTypedArray(R.array.categories_array);
    int n = ta.length();
    String[][] array = new String[n][];
    for (int i = 0; i < n; ++i) {
        int id = ta.getResourceId(i, 0);
        if (id > 0) {
            array[i] = res.getStringArray(id);
        } else {
            // something wrong with the XML
        }
    }
    ta.recycle();

所以例如在最后我得到一个内容为:

的数组
array[0]
  |
  ---> [0] "My Category 01"
  |
  ---> [1] "res/drawable-xxhdpi-v4/img01.png"

array[1]
  |
  ---> [0] "My Category 02"
  |
  ---> [1] "res/drawable-xxhdpi-v4/img02.png"

array[2]
  |
  ---> [0] "My Category 03"
  |
  ---> [1] "res/drawable-xxhdpi-v4/img03.png"

这正是我期望得到的,直到这里才有问题。

稍后在我的代码中,我需要获取上面数组中包含的其中一个类别的资源ID,以便设置ImageView对象的内容,以便我在下面执行(假设我想要类别2的图像) :

ImageView imageView = (ImageView) rowView.findViewById(R.id.categoryicon);

int resID = this.context.getResources().getIdentifier(array[1][1] , "drawable", this.context.getPackageName());
imageView.setImageResource(resID);

我的问题是resID为零所以它意味着没有找到可绘制的资源......

为了工作,我需要数组中的图像名称为img01,img02,img03而不是“res / drawable-xxhdpi-v4 / img01.png”,“res / drawable-xxhdpi -v4 / img02.png“和”res / drawable-xxhdpi-v4 / img03.png“分别如此,当我通过数组[x] [y]将名称传递给getIdentifier时,它可以工作。

我怎样摆脱这个?

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是解析字符串并仅获取图像名称,如下所示。

String[] Image1 = array[1][1].split("/");
String s = Image1[Image1.length-1].replace(".png","").trim();

int resID = this.context.getResources().getIdentifier(s , "drawable", this.context.getPackageName());

答案 1 :(得分:1)