如何从动态创建(在Java中)layer-list / LayerDrawable中获取Android资源ID?

时间:2011-04-12 14:40:43

标签: android drawable layer resource-id

此问题/答案帖子中的“解决方案#2(动态)”:

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是一个很棒的资源!

2 个答案:

答案 0 :(得分:11)

使用“ getIdentifier ”来获取它。假设我在“/ res / drawable /”中有一个文件bug.png,所以我得到它的ResourceID以下代码:

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

//或

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

参考:
anddev.org

答案 1 :(得分:3)

在运行时创建的Drawable没有ID。这些ID引用R类中的int字段,自动从xml文件创建。

由于LayerDrawable构造函数只需要一个Drawable数组,因此您可以提供由任何方法制作的Drawable。一个例子是静态方法Drawable.createFromStream(InputStream is, String srcName)

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