将字符串解析为资源名称

时间:2014-01-07 23:11:16

标签: java android

我的/res文件夹中有图像资源,例如拇指。现在,我有30个大拇指,我现在要做的是启动数组:

Drawable[] thumbs = new Drawable[30];
thumbs[0] = context.getResources().getDrawable(R.drawable.thumb_01);
thumbs[1] = context.getResources().getDrawable(R.drawable.thumb_02);
thumbs[2] = context.getResources().getDrawable(R.drawable.thumb_03);
//this way 27 times more

有没有办法在不创建长数组的情况下以某种方式循环?

3 个答案:

答案 0 :(得分:2)

我希望我能正确理解你的问题。如果是这样,我正在开发的应用程序中有一个非常类似的情况。你可以做的是声明一个Drawables数组,并在循环浏览资源中的每个'thumb'时将每个新的Drawable添加到数组中。我假设有一些有限数量的拇指,因为你从资源中检索它们。如果是这种情况,您还可以在文件中指定包含拇指的拇指数量。

//assume you assign the number of thumbs to integer 'R.integer.numberofthumbs'
int numberOfThumbs = context.getResources().getInteger(R.integer.numberofthumbs);
Drawable[] thumbs = new Drawable[numberOfThumbs];

for(int i = 0; i < numberOfThumbs; i++){
    thumbs[i]= getResources().getDrawable(getResources().getIdentifier("thumb_" + i, "drawable", getPackageName()));
}

这实际上是我在代码中使用的方法,它完美地运行。由于for循环中的命名,标有数字小于10的拇指必须没有前导零。但是,这可以很容易地更改以适合您当前的命名方法。希望我没有太远,这实际上有所帮助。

干杯

答案 1 :(得分:1)

您可以创建一个int数组来保存可绘制资源的值。然后循环遍历这个数组。

int [] array = {R.drawable.thumb_01, R.drawable.thumb_02, ...};
Drawable[] thumbs = new Drawable[array.length];
for(int i = 0; i < array.length; i++){
    thumbs[i] = context.getResources().getDrawable(arr[i]);
}


编辑:

看来你的抽签&#39;名称遵循某种逻辑。所以你可以使用getIdentifier (String name, String defType, String defPackage)

Drawable[] thumbs = new Drawable[theLength];
Resources r = context.getResources();
for(int i = 0; i < theLength; i++){
    String name = i < 10 ?  "thumb_0"+i : "thumb_"+i;
    int drawableId = r.getIdentifier(name, "drawable", context.getPackageName());
    thumbs[i] = r.getDrawable(drawableId);
}

答案 2 :(得分:0)

最后,我用更少的代码获得它,并且没有使用int或Drawables创建数组。

创建/res/values/array.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="thumbs">
    <item>@drawable/thumb_01</item>
    <item>@drawable/thumb_02</item>
    <item>@drawable/thumb_03</item>
    <item>@drawable/thumb_04</item>
    <item>@drawable/thumb_05</item>
    <item>@drawable/thumb_06</item>
    <item>@drawable/thumb_07</item>
    <item>@drawable/thumb_08</item>
    <item>@drawable/thumb_09</item>
    <item>@drawable/thumb_10</item>
    <item>@drawable/thumb_11</item>
    <item>@drawable/thumb_12</item>
    <item>@drawable/thumb_13</item>
    <item>@drawable/thumb_14</item>
    <item>@drawable/thumb_15</item>
    <item>@drawable/thumb_16</item>
    <item>@drawable/thumb_17</item>
    <item>@drawable/thumb_18</item>
    <item>@drawable/thumb_19</item>
    <item>@drawable/thumb_20</item>
</string-array>
</resources>

代码

TypedArray thumbs = context.getResources().obtainTypedArray(R.array.thumbs);
//in the loop
image.setImageDrawable(context.getResources().getDrawable(thumbs.getResourceId(i, 0));