我的Drawable-mdpi文件夹中有一个名为(my_image.png)的图像。
我的Android应用程序与webservice交互。它可能会发回“my_image”。我的Android应用程序应该加载这个图像。
我正在使用Monodroid,我试过这个
int abc = Resources.GetIdentifier("my_image","drawable",null);
但结果总是"0"
。什么时候应该(来自资源文件)
// aapt resource value: 0x7f020000
public const int my_image = 2130837504;
环顾四周,android的方式似乎相似
int i = this.getResources().getIdentifier("txt_asecondtext", "strings", this.getPackageName());
我尝试传递包名而不是null
但是没有做任何事。
答案 0 :(得分:5)
问题是双重的:
Resources.GetIdentifier()
来电中提供套餐名称,而不是null
。确保获得正确包名的简单方法是使用Android.Content.Context.PackageName属性:
int id = Resources.GetIdentifier ("my_image", "drawable", PackageName);
如果您不想/不能使用Context.PackageName
,请查看构建输出,例如: obj\Debug\android\AndroidManifest.xml
文件,并使用/manifest/@package
属性值的值。例如,AndroidManifest.xml
可能包含:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="MonoAndroidApplication2.MonoAndroidApplication2">
<!-- ... -->
</manifest>
因此,您可以使用:
int id = Resources.GetIdentifier ("my_image", "drawable",
"MonoAndroidApplication2.MonoAndroidApplication2");
对于monodroid@lists.ximian.com
订阅者,请参阅 How to use Resources.GetIdentifier()主题和followup message。
答案 1 :(得分:3)
您只需要正确格式化您的请求:
而不是:
int i = this.getResources().getIdentifier("txt_asecondtext", "strings", this.getPackageName());
尝试:
int i = getResources().getIdentifier("[fully qualified package]:drawable/[resource name]", null, null);
因此对于“com.example”包中的Resource
“my_image”,它看起来像:
int i = getResources().getIdentifier("com.example:drawable/my_image", null, null);
更新:我还测试了以下工作形式(包括证明它的日志行:
int i = getResources().getIdentifier(
getPackageName() + ":drawable/" + resource_name, null, null);
Log.d("EXAMPLE", "Just making sure that these IDs match: '" + i + "' == '" + R.drawable.resource_name + "'.");
这也可以像上面那样格式化,我相信我已经指出了你的错误: int i = getResources()。getIdentified(resource_name,“drawable”,getPackageName());
答案 2 :(得分:1)
对于字符串资源,我喜欢这样:
String s = "nameToFetch";
String text = getString(getResources().getIdentifier("str_" + s, "string", getPackageName()));
所以我觉得你应该打电话给你:
String s = "nameToFetch";
Drawable drawable = getDrawable(getResources().getIdentifier("d_" + s, "drawable", getPackageName()));