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

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

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

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


当前回答

1.描述

tools: context = "activity name" it won't be packaged into the apk .Only ADT Layout Editor in your current Layout file set corresponding rendering context, show your current Layout in rendering the context is the activity name corresponds to the activity, if the activity in the manifest file set a Theme, then ADT Layout Editor will render your current Layout according to the Theme.Means that if you set the MainActivity set a Theme. The Light (the other), then you see in visual layout manager o background control of what should be the Theme. The Light looks like.Only to show you what you see is what you get results.

有的人看了会懂一些,有的人看了也不知道,我再加几句解释:

2.样本

以简单的工具:文字为例,多一些图像,方便进一步了解的工具:上下文

<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,并使用工具:text在TextView2中,在布局编辑器的右侧会显示样本name1、样本name2两种字体,如果在运行代码编译后,生成apk,终端只显示样本name1,不显示样本name2的文字。你可以试试跑,看看效果如何。

3.具体的描述

1.这些工具:context = "activity name"它不会被打包到apk中(理解:相当于这个是注释的,编译后没有效果。)

2.Only ADT Layout Editor (i.e., for the above icon on the right side of the simulator) in the current Layout file set corresponding rendering context, the Layout of the current XML in rendering the context is the activity name corresponds to the activity, if the activity in the manifest file set a Theme, then ADT Layout Editor will render your current Layout according to the Theme.Means that if you set the MainActivity set a Theme. The Light can also be (other).(understand: you added tools: context = "activity name", the XML layout is rendering specified activity, establishes a Theme in the manifest file, pictured above right simulator Theme style will also follow changes corresponding to the Theme.)

4.总结

综上所述,以上这些属性主要针对正确的工具,模拟器调试时间显示状态,以及编译不工作,

其他回答

其他答案所缺少的一个东西是任何类的上下文部分,可以与任何扩展上下文的类一起使用。

context是在Android Studio和Android Gradle插件中引入的属性。它在布局文件中用于指定将在其中使用布局的上下文。

tools命名空间用于指定在运行时不使用的属性,但由Android Studio布局编辑器和其他工具使用,以让您更好地控制如何呈现布局。context属性允许您指定表示布局上下文的Java类的完全限定名称。当布局在编辑器中呈现时,布局编辑器使用它来确定应该将哪些主题和属性应用于布局。

它正在查看清单内的应用程序包。它被用来知道被写在那里的活动的确切路径。

context属性可以与任何扩展context的类一起使用,比如活动、服务或应用程序。然而,它最常用于Activity类,因为它们是大多数应用程序的主要入口点。

context属性不仅仅局限于活动,它可以用于任何扩展context的java类。它可以用于任何基于上下文的类,例如在ListView项中,但它主要用于活动。

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

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

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

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

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

(这里是完整的变更集,其中有更多的细节)

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

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

根据Android工具项目网站:

工具:上下文

This attribute is typically set on the root element in a layout XML file, and records which activity the layout is associated with (at designtime, since obviously a layout can be used by more than one layout). This will for example be used by the layout editor to guess a default theme, since themes are defined in the Manifest and are associated with activities, not layouts. You can use the same dot prefix as in manifests to just specify the activity class without the full application package name as a prefix.

<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

1.描述

tools: context = "activity name" it won't be packaged into the apk .Only ADT Layout Editor in your current Layout file set corresponding rendering context, show your current Layout in rendering the context is the activity name corresponds to the activity, if the activity in the manifest file set a Theme, then ADT Layout Editor will render your current Layout according to the Theme.Means that if you set the MainActivity set a Theme. The Light (the other), then you see in visual layout manager o background control of what should be the Theme. The Light looks like.Only to show you what you see is what you get results.

有的人看了会懂一些,有的人看了也不知道,我再加几句解释:

2.样本

以简单的工具:文字为例,多一些图像,方便进一步了解的工具:上下文

<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,并使用工具:text在TextView2中,在布局编辑器的右侧会显示样本name1、样本name2两种字体,如果在运行代码编译后,生成apk,终端只显示样本name1,不显示样本name2的文字。你可以试试跑,看看效果如何。

3.具体的描述

1.这些工具:context = "activity name"它不会被打包到apk中(理解:相当于这个是注释的,编译后没有效果。)

2.Only ADT Layout Editor (i.e., for the above icon on the right side of the simulator) in the current Layout file set corresponding rendering context, the Layout of the current XML in rendering the context is the activity name corresponds to the activity, if the activity in the manifest file set a Theme, then ADT Layout Editor will render your current Layout according to the Theme.Means that if you set the MainActivity set a Theme. The Light can also be (other).(understand: you added tools: context = "activity name", the XML layout is rendering specified activity, establishes a Theme in the manifest file, pictured above right simulator Theme style will also follow changes corresponding to the Theme.)

4.总结

综上所述,以上这些属性主要针对正确的工具,模拟器调试时间显示状态,以及编译不工作,