java - Java 资源背后的概念,引人注目的 gs, "R.id"

标签 java android xml

我遇到了一个问题,它让我意识到我没有理解某个核心概念。 出于某种原因,当我向我的 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/

相关文章:

java - 如何计算 Checkbox 和 TextField 以获得总计

java - JFrame页面授权登录后如何进入下一个JPanel页面?

java - 从父类(super class) Java 实例化子类

android - 如何在 Windows 7 中取消签名 bcprov-jdk15on-146.jar?

android - 不建议使用Google Plus API。我如何从requestScopes(Scope(Scopes.PROFILE))获取性别和出生日期

java - 使用 Java 存储和引用常量表的最佳方法

android - 将多个 APK 上传到 Play 商店并将其本地化为不同语言

python - 我怎样才能从 python 中的 xml 中删除 ns?

java - 更新部分 XML 文件,保留所有格式

java - 抽屉导航项目在左侧没有采用适当的 paddin