Android, 通过字符串获取资源id?
Android, get resource id by string?
有没有更好的方法:
int drawable;
switch(mSignalStrength) {
case 0:
drawable = R.drawable.signal_0;
break;
case 1:
drawable = R.drawable.signal_1;
break;
case 2:
drawable = R.drawable.signal_2;
break;
case 3:
drawable = R.drawable.signal_3;
break;
case 4:
drawable = R.drawable.signal_4;
break;
case 5:
drawable = R.drawable.signal_5;
break;
default:
drawable = -1;
}
我正在尝试用一些 int getDrawableIdByString("signal_" + mSignalStrength)
函数替换 switch 语句。
正如评论中提到的那样,您可以使用
getIdentifier(String name, String defType, String defPackage)
对于你的情况,像这样
int resId = getResources().getIdentifier("signal_" + mSignalStrength, "drawable", getPackageName());
您这样做的方式是最具可读性和最可靠的方式。
它允许您稍后添加/删除项目,并且不会将您束缚于特定的命名约定。
它更易于阅读,因为您只需单击代码中的可绘制对象资源,然后亲自查看哪个可绘制对象与哪种情况相匹配——当您以这种方式生成 id 时,这会变得有点困难。
通过使用反射,您可以 return 通过传递名称来获取资源 ID。
当我需要类似的东西时,这就是我使用的东西:
1 - 将此方法添加到您的代码中:
protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
final int ResourceID =
ctx.getResources().getIdentifier(resName, resType,
ctx.getApplicationInfo().packageName);
if (ResourceID == 0)
{
throw new IllegalArgumentException
(
"No resource string found with name " + resName
);
}
else
{
return ResourceID;
}
}
2 - 像这样使用它:
int myID =
getResourceID("your_resource_name", "drawable", getApplicationContext());
注意 (1):没有路径(如果是图片,也没有扩展名)。
注意(2):使用 "drawable" 绘制对象,"string" 字符串,...
有没有更好的方法:
int drawable;
switch(mSignalStrength) {
case 0:
drawable = R.drawable.signal_0;
break;
case 1:
drawable = R.drawable.signal_1;
break;
case 2:
drawable = R.drawable.signal_2;
break;
case 3:
drawable = R.drawable.signal_3;
break;
case 4:
drawable = R.drawable.signal_4;
break;
case 5:
drawable = R.drawable.signal_5;
break;
default:
drawable = -1;
}
我正在尝试用一些 int getDrawableIdByString("signal_" + mSignalStrength)
函数替换 switch 语句。
正如评论中提到的那样,您可以使用
getIdentifier(String name, String defType, String defPackage)
对于你的情况,像这样
int resId = getResources().getIdentifier("signal_" + mSignalStrength, "drawable", getPackageName());
您这样做的方式是最具可读性和最可靠的方式。
它允许您稍后添加/删除项目,并且不会将您束缚于特定的命名约定。
它更易于阅读,因为您只需单击代码中的可绘制对象资源,然后亲自查看哪个可绘制对象与哪种情况相匹配——当您以这种方式生成 id 时,这会变得有点困难。
通过使用反射,您可以 return 通过传递名称来获取资源 ID。
当我需要类似的东西时,这就是我使用的东西:
1 - 将此方法添加到您的代码中:
protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
final int ResourceID =
ctx.getResources().getIdentifier(resName, resType,
ctx.getApplicationInfo().packageName);
if (ResourceID == 0)
{
throw new IllegalArgumentException
(
"No resource string found with name " + resName
);
}
else
{
return ResourceID;
}
}
2 - 像这样使用它:
int myID =
getResourceID("your_resource_name", "drawable", getApplicationContext());
注意 (1):没有路径(如果是图片,也没有扩展名)。
注意(2):使用 "drawable" 绘制对象,"string" 字符串,...