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


936

从最新的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项目等吗?


是的,我想知道我还错过了什么(在“新增功能”部分中没有看到),因为我始终安装了最新的最新adt&sdk版本(当前使用adt&sdk 20 Preview 3)。
Android开发人员


2
我的应用仍然可以在没有上下文的情况下运行。
最受尊敬的先生,

1
@ user132522这一切都与IDE本身中的开发有关。不适用于运行应用程序时
android开发人员

Answers:


439

这是UI编辑器用来渲染布局预览的工具。它记录在这里

此属性声明此布局默认与哪个活动关联。这样可以启用需要了解活动的知识的编辑器或布局预览中的功能,例如,在快速修复中制作布局主题时预览中应包含哪些布局主题以及在何处插入onClick处理程序


我知道了 。根据此处的屏幕截图:tools.android.com / _ / rsrc / 1337185954574 / recent / newconfigchooser / ...,这意味着不必一定是扩展Context的类,对吗?如果是这样,尽管我不确定该说什么,但我认为它的作用要比您说的要多。
Android开发人员

2
Activity延伸Context,所以不确定您的意思吗?如果您有兴趣,可以检查源代码,它确实可以做更多的事情。我什么都不知道
Nikolay Elenkov 2012年

哎呀。我没有正确阅读屏幕截图的文本。将鼠标悬停在我所显示的内容上时,它还可以说是片段,但是片段的主题没有写在任何地方,不是吗?无论如何,我仍然不确定这个新属性是什么。不知道新的google io是否可以说明这一点。
Android开发人员

25
他们制作了一个展示此功能的新视频:youtube.com/…–
android开发人员


380

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

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

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

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

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

还有一件事:“工具”名称空间很特殊。android打包工具知道会忽略它,因此这些属性都不会打包到APK中。我们将其用于布局中的其他元数据。例如,它也是在其中存储抑制棉绒警告的属性-作为tools:ignore。


如果没有基本包,它如何知道活动的完整路径?它会查看清单文件吗?
Android开发人员

2
是的,它的处理方式与清单文件中的活动注册相同,在这里您也可以在name属性中省略该软件包。如有必要,它将从清单文件根元素开始添加软件包声明。
Tor Norbye 2012年

很好。所有这些(以及更多)都将在google io 2012中显示吗?我等不及要听听新功能了。:)
android开发人员

1
在为新项目生成的XML中,将tools:context值放在TextView字段上。既然这听起来像是将主题应用于整个布局的全局用例,那么为什么不将其放置在根布局中呢?
杰森·罗宾逊

3
我添加了一个文档,其中记录了我们当前的工具属性:tools.android.com/tech-docs/tools-attributes
Tor Norbye

92

根据Android Tools Project网站

工具:上下文

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

<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中的布局编辑器


14

1.说明

tools: context = "activity name"它不会被打包到apk.Only ADT版式编辑器中,在您当前的Layout文件中设置相应的渲染上下文,在渲染上下文中显示您当前的Layout是活动名称对应于该活动,如果该活动在manifest文件中设置了Theme,则ADT布局编辑器将根据MainActivity主题渲染当前的布局。这意味着如果您设置了主题。Light(另一个),然后您将在视觉布局管理器中看到应该作为主题的背景控件。光看起来像。仅向您显示所看到的就是获得的结果。

有些人看到会理解一些,有些人看到还不知道,我将添加一些解释:

2.样品

以一个简单的tools:text,例如一些更多的图像,方便进一步了解tools:context

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="sample name1" />

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="sample name2" />

在此处输入图片说明

TextView1采用android: text,并tools:textTextView2中使用, 在布局编辑器的右侧将显示sample name1sample name2两种字体,如果在运行代码进行编译,生成后apk,终端仅显示sample name1,则不显示sample name2单词。您可以尝试运行,看看效果如何。

3.具体说明

1,tools: context = "activity name"它不会被打包进去apk(理解:相当于这个被注释,编译没有效果。)

2.只有ADT当前布局文件中的布局编辑器(即模拟器右侧上方的图标)设置了相应的渲染上下文,当前XML在渲染上下文中的布局就是活动名称对应的活动,如果如果清单文件中的活动设置了一个主题,那么ADT布局编辑器将根据该主题渲染当前的布局。这意味着如果您设置了MainActivity一个主题。Light也可以是(other)。(理解:您已添加tools: context = "activity name",XML布局正在渲染指定的活动,在清单文件中建立一个Theme,如右图所示,模拟器Theme样式还将跟随与Theme相对应的更改。)

4.总结

综上所述,这些属性主要针对以上合适的工具,模拟器的调试时间显示状态,并且编译不起作用,


7

“工具:上下文”是设计属性之一,可以促进在开发框架中以XML创建布局。此属性用于向开发框架显示为实现布局选择了哪些活动类。使用“ tools:context”,Android Studio自动为预览选择必要的主题。

如果您想了解更多有关Android应用程序开发的其他属性和有用工具的信息,请查看此评论:http : //cases.azoft.com/4-must-know-tools-for-effective-android -发展/



0

tools:context=".MainActivity" 此行在xml文件中使用,指示使用哪个java源文件访问该xml文件。这意味着针对特定的Java文件显示此xml预览。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.