4

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

在android中覆盖两个图像以设置一个imageview

和我想做的很接近,就是动态创建一个layer-list(对于一个状态栏通知图标,我想把我的图标分层建立起来),但是通知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 是一个很棒的资源!

4

2 回答 2

12

使用“ 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

于 2012-05-24T05:37:09.420 回答
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

于 2011-06-03T03:18:11.003 回答