0

假设我有一个 drawable :

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 和 img_foo2 的 ID,而不是可绘制 foo 的 ID。

有什么方法可以获取这些资源所引用的资源 ID?

编辑:

我这样做的原因是因为我从无法控制的外部来源接收这些密钥。我唯一能做的是以某种方式将已知键映射到相应的可绘制对象以绘制正确的图像(因为不同的键可能使用相同的图像)。

我可以使用可以使用应用程序初始化的静态集合来实现这一点,但是我正在尝试帮助我处理资源。

4

3 回答 3

1

使用getValue(), 传递false最后一个参数。我想你现在可以在你现在可以检索到的 id 中获得@drawable/foo引用TypedValue。我没试过;如果你试一试,请告诉我。

于 2012-07-06T17:54:01.823 回答
0

好吧,不是完全干净,但与此同时我设法通过以下方式获得了可绘制的 ID:

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

int drawableId = getResources().getIdentifier(getString(keyId).replace("res/","").replace(".png",""),null,getPackageName());
于 2012-07-06T17:53:10.560 回答
0

你能解释一下你为什么要这样做吗?您通常根本不会使用字符串。此外,我不熟悉使用这样的可绘制对象。

据我所知,您只想拥有一个 foo.png 的可绘制对象。如果您想在各种布局中使用它,那很好 - 只需使用图像视图。对于所有资源,您需要跟踪程序中的整数值(R.drawable.foo 等)。

于 2012-07-06T16:12:06.957 回答