Как получить Resource.Id из значения? - PullRequest
2 голосов
/ 11 августа 2011

У меня в папке Drawable-mdpi есть изображение с именем (my_image.png).

мое приложение для Android взаимодействует с веб-сервисом.Это может отправить обратно «my_image».Мое приложение для Android должно загрузить это изображение.

Я использую Monodroid, и я попробовал это

   int abc = Resources.GetIdentifier("my_image","drawable",null);

И все же результат всегда "0".Когда это должно быть (из файла ресурсов)

        // aapt resource value: 0x7f020000
        public const int my_image = 2130837504;

Оглядываясь вокруг, кажется, что путь андроида похож *

int i = this.getResources().getIdentifier("txt_asecondtext", "strings", this.getPackageName());

Я попытался передать имя пакета вместо nullно это ничего не сделало.

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

Проблема двоякая:

  1. Вам необходимо указать имя пакета в вызове Resources.GetIdentifier(), а не использовать null.
  2. Вам нужно использовать правильноеимя пакета.

Простой способ убедиться, что вы получили правильное имя пакета, это использовать свойство 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 подписчиков см. Как использовать ресурсы.GetIdentifier () thread и последующее сообщение .

3 голосов
/ 11 августа 2011

Вам просто нужно правильно отформатировать ваш запрос:

Вместо:

int i = this.getResources().getIdentifier("txt_asecondtext", "strings", this.getPackageName());

Попробуйте:

int i = getResources().getIdentifier("[fully qualified package]:drawable/[resource name]", null, null);

Так что для Resource «my_image» в пакете «com.example» это будет выглядеть так:

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 (имя_ресурса, "drawable", getPackageName ());

1 голос
/ 11 августа 2011

Для строкового ресурса я делаю так:

String s = "nameToFetch";
String text = getString(getResources().getIdentifier("str_" + s, "string", getPackageName()));

Так что я думаю, что для вашего ничья вы должны позвонить:

String s = "nameToFetch";
Drawable drawable = getDrawable(getResources().getIdentifier("d_" + s, "drawable", getPackageName()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...