导入com.android.internal.R无法解析

17

大家好,我正在使用手势技术,但在导入时遇到了错误。

com.android.internal.R;

无法解析导入 com.android.internal.R

请求帮助,谢谢。


错误是如何出现的?您是否更改了项目设置或手动添加了新文件?如果是,请尝试清理项目并重新构建。 - Ahmed Faisal
4个回答

41
你没有说为什么需要访问 com.android.internal.R,但不幸的是你无法导入它("internal" 暗示它不是公共 API 的一部分)。Google 不暴露这个因为它可能会发生变化。
通过调用 Resources.getSystem() 可以访问内部资源。要获取特定资源标识符的值,你必须知道它的名称,然后使用以下类似的代码来查找该值:
Resources res = Resources.getSystem();
int id = res.getIdentifier("resource name", "resource type", "android");

请注意,您使用的任何名称在未来的Android版本中都可能消失。


谢谢您的回复!我该如何获取此项的资源ID?<item type="id" name="switch_widget" /> - nAkhmedov
@nAkhmedov - 你的问题不太清楚。你展示的是一个id资源定义,你可以在代码中引用它作为R.id.switch_widget。你还有其他想法吗? - Ted Hopp

5

我有几个建议:

1)确保您除了R相关的错误之外,没有其他的错误。在Eclipse中右键单击您的项目文件夹,选择Android工具->修复项目属性。

2)检查您是否导入了正确的R。有时会导入默认的Android.R。


4

是的,你可以使用一些“肮脏的技巧”(即Java反射)来使用内部R。

这里是一个例子:

Class clasz = Class.forName("com.android.internal.R$styleable")
Field field = clasz.getDeclaredField("TextAppearance");
field.setAccessible(true);
int[] textAppearanceStyleArr = (int[])field.get(null);

field = clasz.getDeclaredField("TextAppearance_textSize");
field.setAccessible(true);
int textSizeStyle = (Integer)field.get(null);

2
通过反射访问内部API不受支持,可能无法在所有设备上或未来正常工作! - Mir-Ismaili

3

首先,什么是手势?

你的gen文件夹中是否有名为com.android.internal的包?它是否包含R.java?如果没有,请尝试在Eclipse中选择Project->Clean。如果仍然无法正常工作,则可能存在XML布局文件中的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接