Android 布局文件中的“tools:context”是什么?

新手上路,请多包涵

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

“tools:context”是做什么用的?

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

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

原文由 android developer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

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

原文由 Nikolay Elenkov 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

(这是完整的变更集,其中有更多详细 信息

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

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

原文由 Tor Norbye 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题