协慌网

登录 贡献 社区

Android 布局文件中的 “工具:上下文” 是什么?

从最新的 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" />

什么是 “工具:上下文” 用于?

它怎么知道写在那里的活动的确切路径?它是否在清单中查看应用程序的包?

它仅限于扩展 Context 或仅扩展活动的类吗?它可用于 ListView 项目等吗?

答案

这是工具 UI 编辑器用于呈现布局预览的活动。它记录在这里

此属性声明默认情况下此布局与哪个活动相关联。这使得编辑器或布局预览中的功能需要活动知识,例如布局主题在预览中应该是什么以及从 quickfix 制作插件时插入 onClick 处理程序的位置

该属性基本上是布局上方 “关联活动” 选择的持久性。在运行时,布局始终与活动相关联。它当然可以与多个,但至少一个相关联。在该工具中,我们需要知道这个映射(在运行时发生在另一个方向; 一个活动可以调用 setContentView(布局)来显示布局)以驱动某些功能。

现在,我们只将它用于一件事:选择正确的主题来显示布局(因为清单文件可以注册用于活动的主题,一旦我们知道与布局相关的活动,我们就可以选择正确的主题显示布局)。将来,我们将使用它来驱动其他功能 - 例如渲染操作栏(与活动相关联),添加 onClick 处理程序的位置等。

这是一个工具:namespace 属性的原因是这只是工具使用的设计时映射。布局本身可以被多个活动 / 片段等使用。我们只想给你一种方法来选择一个设计时绑定,以便我们可以显示正确的主题; 您可以随时更改它,就像您可以更改我们的列表视图和片段绑定等。

(这里是这对更详细信息的完整变更

是的,上面列出 Nikolay 链接显示了新配置选择器的外观和工作方式

还有一件事:“工具” 命名空间是特殊的。 android 打包工具知道忽略它,因此这些属性都不会被打包到 APK 中。我们将它用于布局中的额外元数据。它也是存储抑制 lint 警告的属性的地方 - 作为工具:忽略。

根据Android 工具项目网站

工具:上下文

此属性通常在布局 XML 文件的根元素上设置,并记录布局与哪个活动相关联(在设计时,因为显然布局可以由多个布局使用)。例如,布局编辑器将使用它来猜测默认主题,因为主题在 Manifest 中定义并且与活动相关联,而不是布局。您可以使用与清单中相同的点前缀来指定活动类,而不使用完整的应用程序包名称作为前缀。

<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 和 Eclipse 中的布局编辑器,Lint