2011-05-25 96 views
0
int foo = 0xff; 

String label = getNameOfFoo(foo); 

System.out.println(label);// this should print "foo"; 

private String getNameOfFoo(int n){ 
    String ret; 

    ///WHAT COULD I DO HERE TO MAKE THIS A REALITY? 

    return ret; 
} 

在你跳上我之前,“为什么在上帝的名字中你需要这个?!”我会说我的目标是解决Android的识别我的视图ID为字符串(即“id = @ + id/user_name”)但必须将其作为int user_name = R.id.user_name取回的机制。当我知道有一个“user_name”标签时,这工作正常。但是当我不这样做的时候会变成废话。我正在尝试编写一个skinnable应用程序,它可能包含或不包含xml中的所有东西,而且我需要一种方法将id检查为字符串。有没有办法检查java中的变量标签?

+0

这将是很好,如果Java支持这一点。想想所有的挥杆组件,你总是需要设置“名称”属性... – keuleJ 2011-05-25 18:00:13

回答

1

您可以使用Context.getResources()。

int resID = getResources().getIdentifier("label_name", "drawable", "com.test.app"); 

并返回resID。如果是0那么标签找不到。在这里阅读more about Resources

+0

这不完全是我需要的......但它足够接近!非常感谢。 – 2011-05-25 18:11:31

2

您描述的内容不能用Java完成。你能解释一下你的真实问题吗?我制作了可换肤的Android应用程序。

编辑:它可以帮助你,如果你可以从名称到ID而不是?你可以在这种情况下看看这个线程: How do I get the resource id of an image if I know its name?

但我没有解决这个问题,并没有看到它的需要。

0

我有一个应用程序是有点skinnable;用户可以选择一组可绘制资源中的一个作为背景,我不希望对可绘制集进行硬编码。我所做的是使用可识别的模式来命名每个drawable的id,如“background_X”,其中“background_”被固定,并且X可以完全自由形式。

然后,我使用R类的反射来确定运行时每个候选背景,并通过资源ID将它们呈现给用户。当用户做出选择时,我将反映的名称存储在sharedPrefs中,而不是资源ID ......这允许更新(可能会重新编号每个ID)以保留用户的设置。

反射也可用于将数字(foo)转换为名称,但您需要遍历R. [attr | drawable | id | etc。]中的所有内容。*查找匹配项,并且如果添加资源的类别,你将面临价值变化的风险。

相关问题