在Android工作室,如果我写:
android:background="@color/dark_grey"
在dark_grey
中查找了值res/values/colors.xml
。
如果我有:
<include layout="@layout/content_reminders" />
该值被查询为res/layout/content_reminders.xml
。
问题:
查找如何完全?
如何设置更多查找目录?例如,如果我想在那里@layout2/something_else
怎么办?还是不允许?在任何一种情况下,@layout
从哪里抬起来?是否在项目的配置中?
[已添加问题]
两者的格式非常不同:一个是@color/dark_grey
,一个是@layout/content_reminders
。即使接受文件夹res/layout
和res/values
是特殊的并以特殊方式对待它,Gradle如何知道当我输入@layout/content_reminder
时,我不是在谈论价值{{1文件content_reminder
中的文件(而不是res/values/layout.xml
下的文件layout.xml
)?
答案 0 :(得分:2)
Android Studio会为您的resources
编制索引。无论您在res/values/xxxxx.xml
中放置什么,都会使用<color>
或<string>
之类的标记以及xml文件中的行号进行索引。
索引发生是因为它更有效,您需要在autoComplete期间显示所有选项。那么为什么你点击@color/dark_grey
,它会搜索索引并在文件中输入drak_grey
定义的行号。这就是lookup
在Studio中的工作方式。
@layout2
标记中的<include>
不能包含任何内容,因为您无法添加它。但是,您可以为自定义View或ViewGroup添加自己的属性。即使在这种情况下,Android Studio也会为您执行查找,而您无需执行任何其他操作。
就范围而言,它发生在Project
范围内。将查找依赖项(模块)中的所有resources
。如果您有一个模块,但尚未将其添加为依赖项,则该模块将不会用于查找。我认为索引和查找不是发生在原始源文件上,而是发生在gradle构建中生成的文件上。
layout
,color
,string
和其他标签很特别。键入@layout/
时,自动完成将显示所有布局文件。这件事是在Android Studio中完成的。 IDE可以理解这些标记。所以你不能引入新的标签。
Gradle如何识别这个?好吧,我不确定Gradle是不是背后的人。您的SDK附带的Build Tools
可能会负责。
答案 1 :(得分:-1)
android SDK为res / values文件夹下的每个文件生成唯一的Integer值此值在运行时用于查找该特定资源。此文件可以通过在您应用的生成文件夹下打开生成的文件R.java来看待。。
答案 2 :(得分:-1)
不不不,你不能使用@ layout2 / something_else。 编译器只关注@layout。
答案 3 :(得分:-2)
<include layout="@layout/a" />
尝试在@layout/a
;