2012-07-06 41 views
0

获取资源ID比方说,我有一个绘制:Android的 - 从另一个资源

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

有没有什么办法可以获得这些资源引用的资源ID?

编辑:

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

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

回答

1

使用getValue(),传递false最后一个参数。我想你现在可以在TypedValue@drawable/foo中找到你现在可以检索到的ID。我没有尝试过;让我知道如果你给它一个镜头。

+0

不错,工作得很好。该名称必须是'(getPackage()+“:drawable”+ key)',并且该值在'typedValue.data'中,如果有人感兴趣。 – htafoya 2012-07-10 22:26:48

0

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

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

0

哦,不是完全干净,但我在此期间,我设法与这得到绘制编号:

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

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