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

What's "tools:context" in Android layout files?

提问人:android developer 提问时间:6/18/2012 最后编辑:R. Zagórskiandroid developer 更新时间:1/11/2023 访问量:274763

问:

从最近新版本的 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 项等?

xml android-layout android-context android-tools-namespace

评论

0赞 android developer 6/18/2012
是的,我想知道我还错过了什么(没有在“新增功能”部分看到它),因为我总是安装最新的 ADT&SDK 版本(当前使用 ADT&SDK 20 预览版 3)。
10赞 Maxwell175 3/24/2014
另外,请在此处查看官方文档:<tools.android.com/tech-docs/tools-attributes#TOC-tools:context>。
2赞 most venerable sir 2/7/2018
我的应用仍然可以在没有上下文的情况下工作。
1赞 android developer 2/7/2018
@user132522 在 IDE 本身中,一切都与开发有关。不适用于运行应用程序时
0赞 4/6/2018
这又如何呢?stackoverflow.com/questions/41779742/......

答:

503赞 Nikolay Elenkov 6/18/2012 #1

这是 UI 编辑器工具用于呈现布局预览的活动。记录如下

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

评论

0赞 android developer 6/18/2012
明白了。根据这里的截图:tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/...,这意味着不一定是扩展 Context 的类,对吧?如果是这样,我认为它比你所说的要多,尽管我不确定是什么。
2赞 Nikolay Elenkov 6/18/2012
Activity扩展,所以不确定你的意思?它可能确实做得更多,如果您有兴趣,请查看源代码,它是可用的。我不知道任何细节。Context
0赞 android developer 6/18/2012
哎呀。我没有正确阅读屏幕截图的文字.sorry .当将鼠标悬停在我展示的内容上时,它还说它可以是一个片段,但片段在任何地方都没有写出它们的主题,不是吗?无论如何,我仍然不确定这个新属性是做什么用的。想知道新的 Google IO 是否会讲述这一点。
27赞 android developer 7/5/2012
他们制作了一个新视频来展示这个特点:youtube.com/......
1赞 Clive Sargeant 12/6/2017
最新文档链接 developer.android.com/studio/write/tool-attributes.html
395赞 Tor Norbye 6/20/2012 #2

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

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

之所以是 tools: namespace 属性,是因为这只是供工具使用的设计时映射。布局本身可以由多个活动/片段等使用。我们只是想为您提供一种选择设计时绑定的方法,例如,我们可以显示正确的主题;您可以随时更改它,就像您可以更改我们的 ListView 和 fragment 绑定等一样。

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

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

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

评论

0赞 android developer 6/20/2012
如果它没有基础包,它如何知道活动的完整路径?它是否查看清单文件?
2赞 Tor Norbye 6/20/2012
是的,它的处理方式与清单文件中的活动注册相同,您还可以在 name 属性中省略包。如有必要,它会从清单文件根元素预置包声明。
0赞 android developer 6/21/2012
好。所有这些(以及更多)都会在 Google IO 2012 上展示吗?我迫不及待地想听到新功能。:)
1赞 Jason Robinson 10/12/2012
在为新项目生成的 XML 中,它将值放在字段上。由于这听起来像是将主题应用于整个布局的全局用例,为什么不将其放置在根布局中?tools:contextTextView
3赞 Tor Norbye 10/4/2013
我添加了一个文档,其中记录了我们当前的工具属性:tools.android.com/tech-docs/tools-attributes
97赞 anothercoder 2/21/2014 #3

根据 Android Tools 项目站点

工具:上下文

此属性通常在布局 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

7赞 Mihir Patel 7/13/2016 #4

“tools:context”是设计属性之一,可以方便在开发框架中以XML格式创建布局。此属性用于向开发框架显示为实现布局而选择的活动类。使用“tools:context”,Android Studio 会自动为预览选择必要的主题。

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

0赞 Nikita Prajapati 5/8/2017 #5

tools:context=".MainActivity"此行用于 XML 文件,它指示使用哪个 Java 源文件访问此 XML 文件。 这意味着显示 THE XML 预览 对于特定的 Java 文件。

15赞 KeLiuyue 10/15/2017 #6

1.描述

tools: context = "activity name"它不会被打包到 .只有 Layout Editor 在你当前的 Layout 文件中设置了对应的渲染上下文,显示你当前的 Layout 在渲染上下文中是活动名称对应的 Activity,如果 Activity 在文件中设置了一个 Theme,那么 Layout Editor 会根据你当前的 Layout 来渲染你当前的 Theme。光 (另一个),然后你看到 在可视化布局管理器 o 背景控制 应该是主题。光的样子。只有向你展示你所看到的,你得到的结果就是你得到的结果。apkADTmanifestADTMainActivity

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

2.样品

举个简单的,比如多一些图片,方便进一步了解tools:texttools: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" />

enter image description here

TextView1.采用了,并使用了2中的,在布局编辑器的右侧会显示两种字体,如果运行代码后进行编译、生成,终端只显示,不显示文字。你可以试着跑,看看效果如何。android: texttools:textTextViewsample name1sample name2apksample name1sample name2

3.具体说明

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

2.只有 Layout Editor(即模拟器右侧的上面图标)在当前 Layout 文件中设置了对应的渲染上下文,当前 XML 的 Layout 在渲染上下文中是活动名称对应的活动,如果 manifest 文件中的活动设置了一个 Theme,那么 Layout Editor 会根据该 Theme 来渲染你当前的 Layout。光也可以是(其他)。(理解:你添加了,XML布局正在渲染指定的活动,在manifest文件中建立了一个Theme,上图右图模拟器的主题样式也会跟随对应的主题变化。ADTADTMainActivitytools: context = "activity name"

4.总结

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

3赞 Ashik Azeez 1/21/2019 #7

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

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

tools:context=".activity.ActivityName"

适配器:

tools:context="com.PackegaName.AdapterName"

enter image description here

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

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

ETX交易所

0赞 CleanCoder 6/17/2020 #8
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns: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>

在上面的代码中,tools:context 的基本需求是告诉布局文件默认与哪个 Activity 或 fragment 相关联。因此,您可以使用清单文件中使用的相同点前缀来指定活动类名称。

这样一来,Android Studio 将自动为预览选择必要的主题,您无需手动进行预览设置。众所周知,布局文件可以与多个活动相关联,但主题在清单文件中定义,并且这些主题与您的活动相关联。因此,通过在布局文件中添加 tools:context,Android Studio 预览版会自动为您选择必要的主题。

0赞 Akanshi Srivastava 6/17/2020 #9

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

tools:context=".MainActivity"
-1赞 Abhishek Gupta 5/20/2022 #10

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

评论

0赞 Community 5/20/2022
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 Abhishek Gupta 5/23/2022
tools:context 是在任何根视图中定义的此类属性,并声明布局与哪个活动或片段相关联 此声明有助于在布局预览中启用需要了解活动的各种功能,例如自动选择预览所需的主题。
0赞 Ferran Buireu 5/26/2022
这并不能提供问题的答案。一旦你有足够的声誉,你就可以对任何帖子发表评论;相反,提供不需要提问者澄清的答案。- 来自评论
0赞 AmirMohamamd 11/14/2022 #11

根据 developer.android.com

适用于:任何根<View>

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

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

enter image description here

图2.仅当设置了 tools:context 时,onClick 属性的快速修复才有效

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

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
0赞 Tanmay Agarwal 1/11/2023 #12

其他答案缺少的一件事是任何类的上下文部分,它可以与任何扩展上下文的类一起使用。

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

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

它正在查看清单内的应用包。它用于知道写入其中的活动的确切路径。

tools:context 属性可以与扩展 Context 的任何类一起使用,例如 Activity、Service 或 Application。但是,它最常用于 Activity 类,因为它们是大多数应用程序的主要入口点。

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