在 Android Studio 中,如果我写:
android:background="@color/dark_grey"
在 res/values/colors.xml
中查找值 dark_grey
。
如果我有:
<include layout="@layout/content_reminders" />
该值被查找为 res/layout/content_reminders.xml
。
问题:
查找究竟是如何发生的?
如何设置更多 查找目录?例如,如果我想在那里放置
@layout2/something_else
怎么办?或者是不允许的?在任何一种情况下,@layout
是从哪里查找的?它在项目的配置中吗?
[添加的问题]
- Gradle 如何处理歧义?
两者的格式差别很大:一种是@color/dark_grey
,一种是@layout/content_reminders
。即使接受文件夹 res/layout
和 res/values
是特殊的并以特殊方式处理它,Gradle 如何知道当我键入 @layout/content_reminder
,我不是在谈论文件 res/values/layout.xml
中的值 content_reminder
(相对于文件 layout.xml
在 res/layout
下)?
最佳答案
Android Studio 索引您的 resources
.无论你输入什么 res/values/xxxxx.xml
使用标签索引,如 <color>
或 <string>
,以及 xml 文件中的行号。
建立索引是因为它更有效并且您需要在自动完成期间显示所有选项。那你为什么点击@color/dark_grey
, 它搜索索引并转到文件中的行号 drak_grey
被定义为。这是如何lookup
在 Studio 中工作。
你不能拥有 @layout2
这样的东西在<include>
标签,因为没有规定您可以添加它。但是,您可以为自定义 View 或 View 组添加自己的属性。即使在这种情况下,Android Studio 也会为您进行查找,您无需执行任何其他操作。
至于范围,它发生在 Project
中范围。全部resources
在您的依赖项(模块)中将被查找。如果你有一个模块,但你还没有将它添加为依赖项,那么该模块将不会用于查找。我认为索引和查找不是发生在原始源文件上,而是发生在 gradle 构建中生成的文件上。
layout
, color
, string
和其他标签是特殊的。当您键入 @layout/
自动完成将显示所有布局文件。这个东西是在Android Studio中完成的。 IDE 可以理解这些标签。所以你不能引入新的标签。
Gradle 如何识别这一点?好吧,我不确定 Gradle 是否是它背后的那个。 Build Tools
可能是您的 SDK 附带的。
关于android - 在 Android Studio 中如何从 XML 文件中查找 @values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359392/