如何使用字符串作为资源 ID
How to use a String as a resource ID
*更新 - 已解决**
我一直在寻找的是如何获取资源 ID。当你不知道你不知道什么时,很难提出一个问题,但在几分钟内回答问题的两个人似乎明白了。谢谢大家。
这是我最终能够使用的代码,而无需加载所有 32 个位图,同时使用字符串来确定我要查找的是哪个位图。
StartCalc session = new StartCalc(context);
int findDate = session.findDate();
for (int i = 0; i < daysTil.length; i++) {
String numbers = "numbers" + i;
int resId = getResources().getIdentifier(numbers, "drawable", getPackageName());
if (i == findDate) {
ivNumbers.setImageBitmap(BitmapFactory.decodeResource(getResources(), resId));
}
}
*原问题**
我正在尝试使用 for 循环来填充从 0 到 32 的位图数组,但我不知道如何使用字符串 "numbers"(在第 3 行标识)来填充所需的地址BitmapFactory(在第 5 行引用)。这是我用 两种 方式填充数组的代码。漫长的道路有占用太多内存的问题,而且由于我只需要这些图像中的一个基于日期,我希望有办法做到这一点。
private void setNumbers() {
for (int i = 0; i < 33; i++) {
String numbers = "R.drawable.numbers" + i;
Log.e(TAG, numbers);
daysTil[i] = BitmapFactory.decodeResource(getResources(), numbers);
}
daysTil[0] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers0);
daysTil[1] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers1);
daysTil[2] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers2);
daysTil[3] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers3);
daysTil[4] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers4);
daysTil[5] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers5);
daysTil[6] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers6);
daysTil[7] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers7);
daysTil[8] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers8);
daysTil[9] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers9);
daysTil[10] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers10);
daysTil[11] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers11);
daysTil[12] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers12);
daysTil[13] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers13);
daysTil[14] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers14);
daysTil[15] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers15);
daysTil[16] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers16);
daysTil[17] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers17);
daysTil[18] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers18);
daysTil[19] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers19);
daysTil[20] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers20);
daysTil[21] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers21);
daysTil[22] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers22);
daysTil[23] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers23);
daysTil[24] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers24);
daysTil[25] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers25);
daysTil[26] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers26);
daysTil[27] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers27);
daysTil[28] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers28);
daysTil[29] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers29);
daysTil[30] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers30);
daysTil[31] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers31);
daysTil[32] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers32);
}
资源class有这个方法:
public int getIdentifier (String name, String defType, String defPackage)
所以完整的语句可能看起来像这样:
for (int i = 0; i < 33; i++) {
String numbers = "R.drawable.numbers" + i;
Log.e(TAG, numbers);
Resources resources = <context>.getResources();
daysTil[i] = BitmapFactory.decodeResource(getResources(),
resources.getIdentifier ("numbers" +i, "drawable",
<context>.getPackageName());
}
(注意:此代码未经测试 - 仅用于演示)
您应该使用此方法来查找可绘制对象的资源 ID:
String numbers = "numbers" + i;
int resId = getResources().getIdentifier(numbers, "drawable", getPackageName());
*更新 - 已解决** 我一直在寻找的是如何获取资源 ID。当你不知道你不知道什么时,很难提出一个问题,但在几分钟内回答问题的两个人似乎明白了。谢谢大家。
这是我最终能够使用的代码,而无需加载所有 32 个位图,同时使用字符串来确定我要查找的是哪个位图。
StartCalc session = new StartCalc(context);
int findDate = session.findDate();
for (int i = 0; i < daysTil.length; i++) {
String numbers = "numbers" + i;
int resId = getResources().getIdentifier(numbers, "drawable", getPackageName());
if (i == findDate) {
ivNumbers.setImageBitmap(BitmapFactory.decodeResource(getResources(), resId));
}
}
*原问题** 我正在尝试使用 for 循环来填充从 0 到 32 的位图数组,但我不知道如何使用字符串 "numbers"(在第 3 行标识)来填充所需的地址BitmapFactory(在第 5 行引用)。这是我用 两种 方式填充数组的代码。漫长的道路有占用太多内存的问题,而且由于我只需要这些图像中的一个基于日期,我希望有办法做到这一点。
private void setNumbers() {
for (int i = 0; i < 33; i++) {
String numbers = "R.drawable.numbers" + i;
Log.e(TAG, numbers);
daysTil[i] = BitmapFactory.decodeResource(getResources(), numbers);
}
daysTil[0] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers0);
daysTil[1] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers1);
daysTil[2] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers2);
daysTil[3] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers3);
daysTil[4] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers4);
daysTil[5] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers5);
daysTil[6] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers6);
daysTil[7] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers7);
daysTil[8] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers8);
daysTil[9] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers9);
daysTil[10] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers10);
daysTil[11] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers11);
daysTil[12] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers12);
daysTil[13] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers13);
daysTil[14] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers14);
daysTil[15] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers15);
daysTil[16] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers16);
daysTil[17] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers17);
daysTil[18] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers18);
daysTil[19] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers19);
daysTil[20] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers20);
daysTil[21] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers21);
daysTil[22] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers22);
daysTil[23] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers23);
daysTil[24] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers24);
daysTil[25] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers25);
daysTil[26] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers26);
daysTil[27] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers27);
daysTil[28] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers28);
daysTil[29] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers29);
daysTil[30] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers30);
daysTil[31] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers31);
daysTil[32] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers32);
}
资源class有这个方法:
public int getIdentifier (String name, String defType, String defPackage)
所以完整的语句可能看起来像这样:
for (int i = 0; i < 33; i++) {
String numbers = "R.drawable.numbers" + i;
Log.e(TAG, numbers);
Resources resources = <context>.getResources();
daysTil[i] = BitmapFactory.decodeResource(getResources(),
resources.getIdentifier ("numbers" +i, "drawable",
<context>.getPackageName());
}
(注意:此代码未经测试 - 仅用于演示)
您应该使用此方法来查找可绘制对象的资源 ID:
String numbers = "numbers" + i;
int resId = getResources().getIdentifier(numbers, "drawable", getPackageName());