如何从Value获取Resource.Id?

时间:2011-08-11 17:39:28

标签: android xamarin.android

我的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但是没有做任何事。

3 个答案:

答案 0 :(得分:5)

问题是双重的:

  1. 您需要在Resources.GetIdentifier()来电中提供套餐名称,而不是null
  2. 您需要使用正确的包名称。
  3. 确保获得正确包名的简单方法是使用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()));