2012-07-06 3 views
0

에서 자원 ID를 가져옵니다 : 그것은 두 가지 문자열 키 중 하나를 수신 내 프로그램에안드로이드 -의 내가 그릴 수 있다고 가정 해 봅시다 다른 리소스

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의 ID 및 img_foo2는 있지만 드로어 블 foo의 ID는 아닙니다.

이러한 리소스가 참조하는 리소스 ID를 얻을 수있는 방법이 있습니까?

편집 :

난 할 이유는 내가 통제 할 수없는에서 외부 소스에서 이러한 키를받을 수 있기 때문이다. 내가 할 수있는 유일한 방법은 알맞은 이미지를 그려 내기 위해 알기 쉬운 키를 해당 드로어 블에 매핑하는 것입니다 (동일한 이미지가 다른 키에 사용될 수 있기 때문에).

나는 앱으로 초기화 할 수있는 정적 컬렉션을 사용하여이 작업을 수행 할 수 있었지만 대신 자원으로 도움을 주려고합니다.

답변

1

사용 getValue()이, 마지막 매개 변수에 대한 false을 전달합니다. 이제 ID를 검색 할 수있는 TypedValue@drawable/foo에 대한 참조를 얻으실 수 있습니다. 나는 그것을 시도하지 않았다; 네가 그걸 줄 경우 나에게 알려줘.

+0

아주 좋았습니다. 이름은'(getPackage() + ": drawable"+ key)'이어야하고 누군가가 관심이 있다면 그 값은'typedValue.data' 안에 있습니다. – htafoya

0

이런 식으로 일을하려는 이유에 대해 조금 더 설명 할 수 있습니까? 일반적으로 문자열은 전혀 사용하지 않습니다. 또한, 그런 drawables 사용에 익숙하지 않습니다.

필자가 아는 한 foo.png 인 드로어 블을 하나만 갖고 싶습니다. 다양한 레이아웃에서이를 사용하려면 이미지 뷰를 사용하십시오. 모든 리소스에 대해 프로그램의 정수 값을 추적하고 싶을 것입니다 (R.drawable.foo 등).

0

음, 완벽하게 깨끗한하지만 그동안에 나는이 함께 드로어 블 ID를 가져 관리하지 :

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

int drawableId = getResources().getIdentifier(getString(keyId).replace("res/","").replace(".png",""),null,getPackageName()); 
관련 문제