Как получить идентификатор ресурса Android из динамически создаваемого (в Java) списка слоев / LayerDrawable? - PullRequest
4 голосов
/ 12 апреля 2011

«Решение №2 (динамическое)» в этом сообщении с вопросом / ответом:

наложение двух изображений в Android для установки просмотра изображений

очень близко к тому, что я хочу сделать, а именно к динамическому созданию списка слоев (для иконки уведомлений в строке состояния я хочу создать свой значок в слоях), но назначение значков в API уведомлений требуется идентификатор ресурса (который я хочу вызвать из службы).

Я не могу понять, как построить динамически создаваемый список слоев, не создавая сотни XML-файлов со списком слоев (для различных комбинаций значков, которые я хотел бы отображать). «Решение № 1» Дэниела прекрасно работает со статическими XML-файлами, но я ищу более элегантное и динамичное решение.

В приведенном выше посте фрагмент кода:

  Resources r = getResources();

  Drawable[] layers = new Drawable[2]; 

  layers[0] = r.getDrawable(R.drawable.t);

  layers[1] = r.getDrawable(R.drawable.tt);

  LayerDrawable layerDrawable = new LayerDrawable(layers);

кажется, что я хочу, но я не знаю или не понимаю, как "назначить" новый layerDrawable для моего значка уведомления (который принимает идентификатор ресурса).

Спасибо всем ... stackoverflow - замечательный ресурс!

Ответы [ 2 ]

11 голосов
/ 24 мая 2012

Используйте " getIdentifier ", чтобы получить его. Предположим, у меня есть файл bug.png в "/ res / drawable /", поэтому я получаю его ResourceID со следующим код:

int resID = getResources().getIdentifier("org.anddev.android.testproject:drawable/bug", null, null);

// или

int resID = getResources().getIdentifier("bug", "drawable", "org.anddev.android.testproject");      

ссылка:
anddev.org

3 голосов
/ 03 июня 2011

Нет такой вещи, как идентификатор для Drawable, созданного во время выполнения. Эти идентификаторы ссылаются на поля int в классе R, автоматически создаваемые из файлов xml.

Поскольку конструктору LayerDrawable требуется только массив Drawable, вы можете предоставить эти Drawables, созданные любым методом. Примером может быть статический метод Drawable.createFromStream(InputStream is, String srcName).

http://developer.android.com/reference/android/graphics/drawable/Drawable.html#createFromStream%28java.io.InputStream,%20java.lang.String%29

...