我遇到了一个问题,它让我意识到我没有理解某个核心概念。
出于某种原因,当我向我的 strings.xml
文件添加一个值时,发生了一些事情,我的 xml 文件出现了解析错误。我能够解决此问题的唯一方法是删除字符串文件并通过右键单击值文件夹重新创建它,然后“添加 android xml 文件”并将其命名为 strings.xml
.
这使错误消失了,但现在,我的 Activity 正在提示并说它们无法解析 R
(如 R.id
)。
这让人好奇 R
和 xml 文件之间的关系是什么。为什么在引用字符串时使用 @String/something
,而包含它的文件名为 strings
?
最后,为什么即使我在正确的位置创建了一个名为 strings.xml
的 xml 文件,我的项目也没有将其视为 THE strings.xml
文件?
最佳答案
名字
R 资源以特定方式组织:
-
R.layout.*
- 这些资源是您在各种layout-*
中创建的布局文件文件夹 -
R.menu.*
- 这些资源是您的菜单文件,在您的各种menu-*
中创建文件夹。 -
R.id.*
- 这些是各种 View 和菜单项等的资源标识符。可以有多个具有相同 ID 的元素,只要它们位于不同的文件中即可。 -
R.string.*
- 这些是您的字符串资源,在<string>
中声明values-*
文件中的元素文件夹。文件名无关紧要。在一个文件夹中只能有一个具有特定名称的字符串元素。所以你不能有两个hello
values
中的字符串, 但你可以在values
中各有一个和values-en
. -
R.drawable.*
- 这些是您在drawable-*
中拥有的各种 XML 和图像可绘制对象文件夹。
还有很多,但这些是最常见的。当我有更多时间时,我会添加其余部分。
编译后
在编译期间,Android 构建系统将所有 XML 文件放入二进制格式。除 /res/raw
之外的所有内容也被压缩了。这对布局特别有用,压缩后可以更快地膨胀。编译后单个文件不复存在,一切都变成一个大的二进制文件。您使用 R.<resource_type>.<name>
访问此文件中的数据来自 Java,和 @<resource_type>/<name>
来自 XML
命名
对于某些资源(绘图、布局、菜单),文件名很重要,因为资源是使用它来引用的。对于其他资源(字符串、颜色、样式),文件名无关紧要,只要您在文件中声明它们时使用正确的元素(例如 <string>
用于字符串)即可。
关于java - Java 资源背后的概念,引人注目的 gs, "R.id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995776/