我的res / drawable-ldpi文件夹中有一个png文件。我正在使用模拟器在Eclipse中工作,但我在我的2.2.1 Android手机上尝试了这个,我得到了同样的行为。我有一个ImageView,我想以编程方式设置src,基于数据库调用。如果我只是把
src="@drawable.norusdpyr"
在Activity的XML文件中,文件显示正常。但是,如果我把
String imageresource = "R.drawable." + parsedData[4].toString();
chart.setImageURI(Uri.parse(imageresource));
其中parsedData [4] .toString()=“nor_usdpyr”我什么都没看到。我也试过了
String imageresource = "android.resource://" + getPackageName() + "/R.drawable." + parsedData[4].toString();
chart.setImageURI(Uri.parse(imageresource));
和
InputStream is = getClass().getResourceAsStream("/drawable/" + parsedData[4].toString());
chart.setImageDrawable(Drawable.createFromStream(is, ""));
和
String imageresource = "R.drawable." + parsedData[4].toString();
File file = new File(imageresource);
chart.setImageDrawable(Drawable.createFromPath(file.getAbsolutePath()));
和
Context context = getApplicationContext();
int ResID = context.getResources().getIdentifier(imageresource, "drawable", "com.KnitCard.project");
chart.setImageResource(ResID);
最后,
chart.setImageURI(Uri.parse("android.resource://" + getPackageName() + "/R.drawable.nor_usdpyr"));
不起作用。
这些都不起作用。我究竟做错了什么?谢谢!
答案 0 :(得分:1)
首先,这不应该起作用:
src="@drawable.norusdpyr"
正确的方法是:
android:src="@drawable/norusdpyr"
其次,您在XML中使用的字符串 ids 仅在XML中有效。构建资源时,所有这些字符串都将替换为各自的整数值。理想情况下,您不需要从字符串名称加载包资源。但是,如果这样做,您可以查找具有此类名称的字段,获取它所拥有的整数值,然后调用setImageResource
。你对这个版本非常接近:
int ResID = context.getResources().getIdentifier(imageresource, "drawable", "com.KnitCard.project");
chart.setImageResource(ResID);
除了imageResource
应该是parsedData[4].toString()
且没有R.drawable.
前缀。您可以使用context.getPackageName()
代替对软件包名称进行硬编码。
答案 1 :(得分:0)
您还可以使用setImageDrawable()
方法直接使用资源:
myImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.myPngFileName));
这将避免获取ResID然后将其用于访问
的过程