Как получить идентификатор ресурса Android из динамически создаваемого (в Java) списка слоев / LayerDrawable?
"Решение № 2 (динамическое)" в этом вопросе / ответе:
наложение двух изображений в Android, чтобы установить изображение
очень близок к тому, что я хочу сделать, а именно к динамическому созданию списка слоев (для значка уведомлений в строке состояния я хочу создать свой значок в слоях), но для назначения значков в API уведомлений требуется ресурс ID (на который я хочу позвонить из службы).
Я не могу понять, как построить динамически создаваемый список слоев, не создавая сотни 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 для моего значка уведомления (который принимает идентификатор ресурса).
Спасибо всем... stackru - замечательный ресурс!
2 ответа
Нет такой вещи, как идентификатор для Drawable, созданного во время выполнения. Эти идентификаторы ссылаются на поля int в классе R, автоматически создаваемые из файлов xml.
Поскольку для конструктора LayerDrawable требуется только массив Drawable, вы можете предоставить эти Drawables, созданные любым методом. Примером будет статический метод Drawable.createFromStream(InputStream is, String srcName)
,
http://developer.android.com/reference/android/graphics/drawable/Drawable.html
Используйте "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