在我的Widget
我有一个ImageView
,我会从外面收到一个代码,这些代码在1-40之间,从另一边我在{{1}中有40个不同的图像我将它们命名为相关代码的文件夹。
现在我想做的是,通过从外面读取一个代码,在drawable
中显示具有相同名称的图像。
例如,如果我读了代码33,我想在ImageView
中显示名为33的图像。
答案 0 :(得分:2)
对于一个名为" 33.png"或类似的,这样做:
int redId = getResources().getIdentifier("33", "drawable", this.getPackageName());
img.setImageResource(R.drawable.my_image);
而且,在一般情况下:
void setImageByResourceName(int resourceName) { // 33 in the example above
String nameStr = String.valueOf(resourceName);
int redId = getResources().getIdentifier(nameStr, "drawable", this.getPackageName());
img.setImageResource(R.drawable.my_image);
}
答案 1 :(得分:1)
将您的图片放入资源文件夹,您就可以按名称选择图片。 假设你的文字是33,你的图像名称是33.png
AssetManager assetManager = context.getAssets();
String fileName = "33";
Bitmap b = BitmapFactory.decodeStream(assetManager.open(fileName + ".png"));
imageView.setImageBitmap(b);
答案 2 :(得分:0)
您可以使用以下方法读取其名称的Drawable资源:
private static Drawable getDrawableResourceByName(Context context, String resourceName) {
String packageName = AmbyantApplication.get().getPackageName();
int resId = AmbyantApplication.get().getResources().getIdentifier(resourceName, "drawable", packageName);
if (resId != 0) {
return context.getResources().getDrawable(resId);
} else {
return null;
}
}
答案 3 :(得分:0)
如果你知道它的名字,你可以向系统询问资源ID。例如:
int resId = context.getResources().getIdentifier(
"33", "drawable", context.getPackageName());
但是,此方法调用相对较贵,因此如果必须,请尽量少用它。来自docs:"注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。"
答案 4 :(得分:0)
您可以使用SparseArray或Hashmap将图像映射到整数,然后如果从服务器接收整数,您可以根据该键设置drawable。
您可以通过
获取与sparseArray中的密钥相关的图像SparseArray<E> t = new SparseArray<E>();
e = t.get(key);
.
.
.