Android - Вземете идентификатор на ресурс от друг ресурс

Да кажем, че имам чертеж:

foo.png

В определен момент от моята програма тя получава един от двата възможни низови ключа: "img_foo1" или "img_foo2", които искам да използвам, за да извлека същия "foo" чертеж.

Така че се опитах да осъществя достъп до тегленето от други два ресурса по пътя на:

<drawable name="img_foo1">@drawable/foo</drawable>
<drawable name="img_foo2">@drawable/foo</drawable>

Тогава си помислих, че мога да използвам getResources().getIdentifier() с тези имена на ключове, но това ми дава идентификатора на img_foo1 и img_foo2, но не и идентификатора на чертежен foo.

Има ли някакъв начин да получа идентификатора на ресурса, към който се отнасят тези ресурси?

редактиране:

Причината да правя това е, че получавам тези ключове от външен източник, от който нямам контрол. Единственото нещо, което мога да направя, е по някакъв начин да картографирам известните ключове към съответните чертежи, за да начертая правилното изображение (защото едно и също изображение може да се използва от различни ключове).

Бих могъл да постигна това със статична колекция, която мога да инициализирам с приложението, но вместо това се опитвам да ми помогна с ресурсите.


person htafoya    schedule 06.07.2012    source източник


Отговори (3)


Използвайте getValue(), предавайки false за последния параметър. Предполагам, че сега ще получите препратката към @drawable/foo в TypedValue, чийто идентификатор сега можете да извлечете. Не съм го пробвал; уведомете ме, ако опитате.

person Dheeraj Vepakomma    schedule 06.07.2012
comment
добре, работи много добре. името трябва да е (getPackage() + ":drawable" + key), а стойността е вътре в typedValue.data, ако някой се интересува. - person htafoya; 11.07.2012

Можете ли да обясните малко повече защо се опитвате да правите нещата по този начин? Обикновено изобщо не бихте използвали низ. Освен това не съм запознат с използването на чертежи като този.

Доколкото знам, вие искате просто да имате един чертеж, който е foo.png. Ако искате да използвате това в различни оформления, това е добре - просто използвайте изгледи на изображения. За всички ресурси ще искате да следите целочислените стойности в програмата (R.drawable.foo и т.н.).

person Mark D    schedule 06.07.2012

Е, не е напълно чисто, но междувременно успях да получа ID с възможност за рисуване с това:

int keyId = getResources().getIdentifier(key, "drawable", getPackageName());

int drawableId = getResources().getIdentifier(getString(keyId).replace("res/","").replace(".png",""),null,getPackageName());
person htafoya    schedule 06.07.2012