2011-04-12 17 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