2011-04-12 19 views
4

「解決方案#2(動態)」這個提問/回答後:如何從動態創建的(在Java中)layer-list/LayerDrawable獲取Android資源ID?

overlay two images in android to set an imageview

非常接近我想要做的,這是動態創建圖層列表(一個狀態欄通知圖標,我想在圖層中構建我的圖標),但通知API中的圖標分配需要資源ID(我想從服務調用)。

我無法弄清楚如何在不構建數百個層列表.xml文件(針對我希望能夠顯示的各種圖標組合)的情況下構建動態構建圖層列表。 Daniel的「解決方案#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我的通知圖標(這需要資源ID)。

感謝所有... stackoverflow是一個很好的資源!

回答

3

在運行時創建的Drawable的ID沒有這種東西。這些ID引用R類中的int字段,它們是從xml文件自動創建的。

由於LayerDrawable構造只需要一個繪製對象數組,你可以提供從任何方法制成的可繪製。一個例子是靜態方法Drawable.createFromStream(InputStream is, String srcName)

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

+0

謝謝,Aleadam(亞當?)!對不起,我以前沒有看到您的回覆;)。我從你的第一句話猜測,我只能填充我的狀態欄圖標一個靜態創建的資源:(我希望有一種方法來保持不必在層列表.xml文件中構建我所有的圖標組合。並且再次感謝您的回覆--Sean – 2011-06-10 19:49:52

+1

我相信資源是引用通知圖標的唯一方式,但您應該只需要爲每個屏幕密度添加一個圖標。 – Aleadam 2011-06-11 04:10:39

11

使用 「則getIdentifier」 獲得it.Suppose,我必須在一個文件bug.png 「/ RES /繪製/」,所以我得到了下面的代碼資源ID:

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

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

參考:
anddev.org