Android - 从其他资源获取资源ID

时间:2012-07-06 15:58:52

标签: android resources drawable

让我说我有一个可绘制的:

foo.png

在我的程序中的某个时刻,它会收到两个可能的字符串键之一:“img_foo1”或“img_foo2”,我想用它来检索相同的“foo”drawable。

所以我尝试通过以下方式从其他两个资源访问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吗?

修改

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

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

3 个答案:

答案 0 :(得分:1)

使用getValue(),将false传递给最后一个参数。我想您现在可以获得@drawable/fooTypedValue的引用,您现在可以检索其ID。我没试过;如果你试一试,请告诉我。

答案 1 :(得分:0)

你能解释一下你为什么要这样做吗?通常你根本不会使用字符串。另外,我不熟悉使用这样的drawable。

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

答案 2 :(得分:0)

嗯,不完全干净,但与此同时,我设法得到了可绘制的ID:

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

int drawableId = getResources().getIdentifier(getString(keyId).replace("res/","").replace(".png",""),null,getPackageName());