有没有办法在java中检查变量的标签?

时间:2011-05-25 17:48:42

标签: java android reflection introspection

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的机制,将我的View id识别为字符串(即“id = @ + id / user_name”),但必须在我的代码中将其作为int user_name = R.id.user_name返回。当我知道有一个“user_name”标签时,这很好用。但是当我不这样做时,就去废话。我正在尝试编写一个skinnable应用程序,可能包含或不包含xml中的所有类型的东西,我需要一种方法来检查id作为字符串。

3 个答案:

答案 0 :(得分:2)

您所描述的内容无法用Java完成。你能解释一下你真正的问题吗?我已经制作了一个可换肤的Android应用程序。

编辑:如果您可以从名称转到ID,它会对您有所帮助吗?在这种情况下你可以看一下这个帖子: How do I get the resource id of an image if I know its name?

然而,我确实没有这样解决,也没有看到它的需要。

答案 1 :(得分:1)

您可以使用Context.getResources()来实现此目的。

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

返回的resID。如果是0则找不到标签。请阅读more about Resources

答案 2 :(得分:0)

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

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

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