0

我的 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"));

不起作用。

这些都不起作用。我究竟做错了什么?谢谢!

4

2 回答 2

1

首先,这不应该工作:

src="@drawable.norusdpyr"

正确的方法是:

android:src="@drawable/norusdpyr"

其次,您在 XML 中使用的那些字符串ID仅在 XML 中有效。构建资源时,所有这些字符串都将替换为它们各自的数值。理想情况下,您不需要从字符串名称加载包资源。但如果你这样做了,你可以查找具有这样名称的字段,获取它所持有的setImageResource数值,然后调用. 你非常接近这个版本:

int ResID = context.getResources().getIdentifier(imageresource, "drawable", "com.KnitCard.project");
chart.setImageResource(ResID);

除了imageResource应该parsedData[4].toString()没有R.drawable.前缀。您可以使用context.getPackageName()而不是硬编码您的包名称。

于 2012-06-08T17:44:32.580 回答
0

您还可以使用该setImageDrawable()方法直接使用资源:

myImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.myPngFileName));

这将避免获取 ResID 然后使用它进行访问的过程

于 2013-09-12T19:57:45.253 回答