【问题标题】:Trying to get drawable resource ID from its name in Android试图从Android中的名称获取可绘制资源ID
【发布时间】:2015-01-03 22:52:20
【问题描述】:

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

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 为零,所以这意味着尚未找到可绘制资源...

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

我怎样才能摆脱这个?

【问题讨论】:

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


    【解决方案1】:

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

    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());
    

    【讨论】:

    • 太棒了!谢谢!这也有效: String imgName = array[0][1]; imgName.substring(imgName.lastindexof("/") + 1, imgName.lastindexof("."));
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2014-05-08
    相关资源
    最近更新 更多