从ADT最近的新版本开始,我注意到布局XML文件中的这个新属性,例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity" />
“工具:上下文”是用来做什么的?
它怎么知道写在那里的activity的确切路径呢?它看了应用程序的包装,在舱单里面吗?
是仅限于延伸上下文的类,还是仅限于活动?它是否可用于ListView项等?
这是UI编辑器用来呈现布局预览的工具的activity。这里记录了它:
此属性声明默认情况下此布局与哪个activity关联。这在编辑器或布局预览中启用了需要了解activity的功能,例如预览中的布局主题应该是什么,以及从quickfix创建onClick处理程序时在哪里插入onClick处理程序
该属性基本上是布局上方“关联activity”选择的持久性。在运行时,布局总是与activity相关联。它当然可以与不止一个相关联,但至少可以与一个相关联。在工具中,我们需要了解这种映射(在运行时发生在另一个方向;activity可以调用setContentView(布局)来显示布局),以便驱动某些特性。
现在,我们只为一件事使用它:为布局选择正确的主题(因为清单文件可以注册用于activity的主题,一旦我们知道与布局相关联的activity,我们就可以为布局选择正确的主题)。在未来,我们将使用它来驱动其他特性--比如呈现操作栏(它与activity相关联),添加onClick处理程序的地方等等。
这是一个tools:namespace属性的原因是,这只是一个供工具使用的designtime映射。布局本身可以被多个活动/片段等使用,我们只是想给你一个选择设计时绑定的方法,这样我们可以例如显示正确的主题;您可以随时更改它,就像您可以更改我们的listview和片段绑定一样,等等。
(以下是完整的变更集,其中有更多关于此问题的细节)
是的,尼古拉上面列出的链接显示了新配置选择器的外观和工作方式
还有一点:“tools”命名空间是特殊的。android打包工具知道忽略它,所以那些属性都不会被打包到APK中。我们将它用于布局中的额外元数据。例如,它也是存储禁止lint警告的属性的地方--作为工具:Ignore。
根据Android Tools项目网站:
工具:上下文
该属性通常设置在布局XML文件中的根元素上,并记录布局与哪个activity相关联(在设计时,因为显然一个布局可以被多个布局使用)。例如,这将被布局编辑器用来猜测默认主题,因为主题是在清单中定义的,并且与活动相关联,而不是与布局相关联。您可以使用与清单中相同的点前缀,只指定activity类,而不使用完整的应用程序包名称作为前缀。
<android.support.v7.widget.GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
使用者:Studio中的布局编辑器&;日食,皮棉