什么是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项目等?

268866 次浏览

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

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

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

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

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

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

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

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

根据Android工具项目网站

工具:上下文

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

<android.support.v7.widget.GridLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"tools:context=".MainActivity">

使用者:Studio和Eclipse、Lint中的布局编辑器

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

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

tools:context=".MainActivity"此行用于xml文件,指示使用哪个java源文件访问此xml文件。它的意思是为perticular java文件显示这个xml预览。

1.说明

tools: context = "activity name"它不会被打包成apk。只有ADT布局编辑器在你当前的布局文件中设置相应的渲染上下文,显示你当前的布局在渲染上下文中是活动名称对应的活动,如果活动在manifest文件中设置了一个主题,那么ADT布局编辑器将根据主题渲染你当前的布局。这意味着如果你设置了MainActivity设置了一个主题。光(另一个),那么你在可视布局管理器中看到什么应该是主题的背景控件。光看起来像。只有向你展示所见即所得的结果。

有些人看到了就会明白一些,有些人看到了也不知道,我再补充几句解释:

2.样本

以简单的tools:text为例,多一些图片,方便进一步理解tools:context

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

在此处输入图片描述

TextView1采用了android: text,并在TextView2中使用了tools:text,在Layout编辑器的右侧会显示sample name1sample name2两种字体,如果你运行代码编译后,生成apk,终端只显示sample name1,不显示sample name2的文字。你可以尝试运行,看看效果如何。

3.具体说明

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

2.只有ADT布局编辑器(即上面模拟器右侧的图标)在当前布局文件中设置相应的渲染上下文,当前XML中的布局渲染上下文是活动名称对应的活动,如果活动在清单文件中设置了主题,那么ADT布局编辑器将根据主题渲染你当前的布局。意思是如果你设置了MainActivity设置了一个主题。灯也可以是(其他的)。(明白:你添加了tools: context = "activity name",XML布局是渲染指定的活动,在清单文件中建立了一个主题,上面模拟器右侧的主题样式也会跟着主题的变化。)

4.summary

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

这是最好的解决方案:https://developer.android.com/studio/write/tool-attributes

这是设计属性我们可以在xml中设置活动上下文,例如

tools:context=".activity.ActivityName"

适配器:

tools:context="com.PackegaName.AdapterName"

在此处输入图片描述

点击标记的图标时可以导航到java类和工具有更多的功能,如

tools:text=""tools:visibility:""tools:listItems=""//for recycler view

etx

<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">
//more views
</androidx.constraintlayout.widget.ConstraintLayout>

在上面的代码中,工具:上下文的基本需求是告诉布局文件默认与哪个活动或片段相关联。因此,您可以使用与Manifest文件中使用的相同的点前缀指定活动类名。

通过这样做,Android Studio将自动为预览选择必要的主题,您不必手动进行预览设置。众所周知,布局文件可以与多个活动相关联,但主题在Manifest文件中定义,这些主题与您的活动相关联。因此,通过在布局文件中添加工具:上下文,Android Studio预览将自动为您选择必要的主题。

此属性有助于获得与布局关联的活动的最佳知识。当您必须使用QuickFix在视图上添加onClick处理程序时,这也很有用。

tools:context=".MainActivity"

此属性声明此布局默认与哪个活动相关联。这将启用编辑器或布局预览中需要了解活动的功能。

根据developer.android.com

适用于:任何root<View>

使用者:Lint,Android Studio布局编辑器

此属性声明默认情况下此布局与哪个活动相关联。这将启用编辑器或布局预览中需要了解活动的功能,例如布局主题应在预览中的内容以及从快速修复中制作这些处理程序时在何处插入onClick处理程序(图2)。

输入图片描述

图2. onClick属性的快速修复仅在您设置了工具:上下文时才有效

您可以使用与清单文件中相同的点前缀指定活动类名(不包括完整的包名)。例如:

<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"tools:context=".MainActivity" >