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" /> 

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

它甚至如何知道写在那里的活动的确切path? 它是否在清单中查看应用程序的包?

它仅限于扩展上下文的类还是仅限于活动? 它可用于ListView项目等?

这很可能是UI编辑器用于呈现布局的活动(它将根据活动find正确的主题)。 这是logging在这里 (在文章的中间;订阅该页面以保持最新)。

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

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

这是一个工具:命名空间属性的原因是,这只是工具使用的devise时间映射。 布局本身可以被多个活动/片段等使用。我们只是想给你一个selectdevise时绑定的方式,以便我们可以例如显示正确的主题; 你可以随时改变它,就像你可以改变我们的列表视图和片段绑定等。

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

是的,上面列出的尼古拉链接显示了新configurationselect器的外观和工作原理

还有一件事:“工具”命名空间是特殊的。 android打包工具知道忽略它,所以这些属性都不会打包到APK中。 我们正在使用它在布局中额外的元数据。 这也是在哪里,例如,抑制lint警告的属性被存储 – 作为工具:忽略。

根据Android工具项目网站 :

工具:上下文

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

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

“工具:上下文”是在开发框架中可以促进XML中的布局创build的devise属性之一。 此属性用于显示开发框架select哪个活动类来实现布局。 使用“工具:上下文”,Android Studio会自动为预览select必要的主题。

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

tools:context=".MainActivity" thisline在xml文件中使用,表明使用哪个java源文件来访问这个xml文件。 它意味着显示这个特定java文件的xml预览。

1.Description

tools: context = "activity name"它不会被打包到apk 。只有ADT Layout Editor在你当前的Layout文件中设置相应的渲染上下文,显示你当前的Layout在渲染上下文中是活动名称对应的活动,if manifest文件中的活动设置主题,然后ADT布局编辑器将根据Theme.Means呈现您当前的布局,如果您将MainActivity设置为主题。 光(其他),然后你在视觉布局pipe理器中看到什么应该是主题背景控制。 光看起来像。只有向你展示你看到的是你得到的结果。

有些人看会明白一些,有些人看到也不知道,我会加几句解释:

2.Sample

以一个简单的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" /> 

在这里输入图像说明

TextView 1采用了android: text ,并在TextView 2中使用tools:text ,在Layout编辑器右侧将显示sample name1sample name2两个字体,如果在运行代码后编译,生成apk ,terminal只显示sample name1 ,不显示sample name2的字样。 你可以尝试运行,看看效果如何。

3.具体描述

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

2.只有ADT布局编辑器(即为模拟器右上方的图标)在当前布局文件中设置相应的渲染上下文时,当前XML在渲染上下文的布局是活动名称对应的活动,如果清单文件中的活动设置了主题,那么ADT布局编辑器将根据Theme.Means呈现您当前的布局,如果您将MainActivity设置为主题。 (其他)(理解:你添加的tools: context = "activity name" ,XML布局就是渲染指定的activity,在manifest文件中build立一个Theme,如上图右边的模拟器Theme style也会跟着相应的变化到主题。)

4.summary

综上所述,这些属性主要针对上述正确的工具,模拟器debugging时显示状态,编译不起作用,