2012-07-06 64 views
0

獲取資源ID比方說,我有一個繪製:Android的 - 從另一個資源

foo.png 

在某一點上我的程序,它接收兩個可能的字符串項之一:「img_foo1」或「img_foo2」我想用它來檢索相同的「foo」drawable。

所以,我試圖訪問來自另外兩個資源的繪製中的方式:

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

後來我想,我可以用getResources()則getIdentifier()與鍵的名稱,但是,讓我img_foo1的ID和img_foo2,但不是可繪製的foo的ID。

有沒有什麼辦法可以獲得這些資源引用的資源ID?

編輯:

我之所以這樣做,是因爲我從我無法控制的外部源接收這些密鑰。我可以做的唯一事情是以某種方式將已知鍵映射到相應的drawable上以繪製正確的圖像(因爲同一圖像可能被不同的鍵使用)。

我可以通過一個靜態集合來實現這一點,我可以使用應用程序進行初始化,但是我試圖用資源來幫助我。

回答

1

使用getValue(),傳遞false最後一個參數。我想你現在可以在TypedValue@drawable/foo中找到你現在可以檢索到的ID。我沒有嘗試過;讓我知道如果你給它一個鏡頭。

+0

不錯,工作得很好。該名稱必須是'(getPackage()+「:drawable」+ key)',並且該值在'typedValue.data'中,如果有人感興趣。 – htafoya 2012-07-10 22:26:48

0

你能解釋一些關於你爲什麼要這樣做的事嗎?通常你根本不會使用字符串。另外,我不熟悉如何使用drawable。

據我所知,你只需要一個drawable就是foo.png。如果你想在各種佈局中使用它,那很好 - 只需使用圖像視圖即可。對於所有資源,您將需要跟蹤程序中的整數值(R.drawable.foo等)。

0

哦,不是完全乾淨,但我在此期間,我設法與這得到繪製編號:

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

int drawableId = getResources().getIdentifier(getString(keyId).replace("res/","").replace(".png",""),null,getPackageName()); 
相關問題