2

我遇到了一个问题,让我意识到我没有得到核心概念。出于某种原因,当我向strings.xml文件添加值时,发生了一些事情,我的 xml 文件出现了解析错误。我能够解决这个问题的唯一方法是删除字符串文件并通过右键单击值文件夹重新创建它,然后“添加 android xml 文件”并命名它strings.xml。这使错误消失了,但现在,我的活动正在抱怨并说他们无法解决R(如R.id)。

R这让人好奇xml 文件之间的关系是什么。为什么当你引用一个字符串时,你使用@String/something, 当包含它的文件被调用时strings

最后,为什么即使我strings.xml在正确的位置创建了一个名为 的 xml 文件,我的项目也没有将他视为 THEstrings.xml文件?

4

3 回答 3

2

名称

R 资源以特定方式组织:

  • R.layout.*- 这些资源是您在各个layout-*文件夹中创建的布局文件
  • R.menu.*- 这些是您的菜单文件的资源,在您的各种menu-*文件夹中创建。
  • R.id.*- 这些是您的各种视图和菜单项等的资源标识符。可以有多个具有相同 ID 的元素,只要它们位于不同的文件中。
  • R.string.*- 这些是您的字符串资源,在文件夹<string>中文件的元素中声明。values-*文件名无关紧要。单个文件夹中只能有一个具有特定名称的字符串元素。所以你不能在 中有两个hello字符串,但你可以在和values中各有一个。valuesvalues-en
  • R.drawable.*- 这些是您drawable-*文件夹中的各种 XML 和图像可绘制对象。

还有很多,但这些是最常见的。当我手头有更多时间时,我会添加其余的。

编译后

在编译期间,Android 构建系统将所有 XML 文件转换为二进制格式。除了 之外的所有内容也都/res/raw被压缩了。这对布局特别有用,压缩后可以更快地膨胀。单个文件在编译后不复存在,一切都变成了一个大的二进制文件。R.<resource_type>.<name>您可以使用Java 和@<resource_type>/<name>XML访问此文件中的数据

命名

对于某些资源(可绘制对象、布局、菜单),文件名很重要,因为使用它来引用资源。对于其他资源(字符串、颜色、样式),文件名是无关紧要的,只要您<string>在文件中声明它们时使用正确的元素(例如对于字符串)。

于 2013-04-14T05:01:57.663 回答
1

当您的项目被编译和构建时,发生的事情之一就是R文件的生成。每个命名资源都有一个public static final int标识符,例如R.string.foo,它将引用一个用 定义的字符串name="foo"。通过这种方式,您可以从 Java 中引用资源,Android 会将其映射到资源并从您的应用程序包中加载它。

资源可能过载;你可以有两个字符串都被命名foo为不同的配置,但它们在R类中具有相同的标识符。系统将在运行时选择与设备配置最匹配的一个。

如果您的任何资源声明有错误,R则将无法构建,因此引用它的任何 java 类都会抱怨它。您可以在 Eclipse 中执行Project > Clean并查看是否有帮助,否则请确保您的资源已正确声明和/或具有有效名称。

于 2013-04-14T04:32:29.603 回答
-2
R.java is a seperate file created by eclipse, 
its not related to strings.xml ,Clean your project then build and run again . 
you will found R.java inside your gen folder
Read this

http://developer.android.com/tools/projects/index.html

于 2013-04-14T04:26:10.313 回答