1005

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

4

9 回答 9

492

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

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

于 2012-06-18T07:56:54.150 回答
394

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

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

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

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

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

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

于 2012-06-19T23:33:55.893 回答
97

根据Android 工具项目网站

工具:上下文

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

于 2014-02-20T16:16:18.887 回答
15

一、说明

tools: context = "activity name"它不会被打包进apk.Only ADTLayout Editor 在你当前的 Layout 文件中设置对应的渲染上下文,显示你当前的 Layout 在渲染上下文中是 Activity 名称对应的 Activity,如果manifest文件中的 Activity 设置了 Theme,那么ADT布局编辑器将根据主题呈现您当前的布局。意味着如果您设置MainActivity了主题。光(另一个),然后您会在可视化布局管理器中看到应该是主题的背景控制。光的样子。只为向您展示所见即所得的结果。

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

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 name1, 这sample name2两种字体,如果你运行代码编译后生成apk,终端只显示sample name1,不显示sample name2字样。你可以试试运行,看看效果如何。

3.具体说明

1.tools: context = "activity name"它不会被打包进apk(理解:相当于this is commented,编译后没有效果。)

2.只有ADTLayout Editor(即模拟器右侧上面的图标)在当前Layout文件中设置了对应的渲染上下文,当前XML在渲染上下文中的Layout就是activity名称对应的activity,如果清单文件中的activity设置了一个主题,然后ADT布局编辑器将根据主题呈现您当前的布局。意味着如果您设置了MainActivity一个主题。Light也可以是(other)。(理解:你添加了tools: context = "activity name",xml布局是渲染指定activity,在manifest文件中建立一个Theme,上图右边模拟器的Theme风格也会跟着Theme对应的变化。)

4.总结

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

于 2017-10-15T03:57:01.123 回答
7

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

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

于 2016-07-13T11:08:28.047 回答
3

这是最好的解决方案: 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 

于 2019-01-21T05:26:19.190 回答
0

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

于 2017-05-08T07:33:37.777 回答
0
<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 预览会自动为您选择必要的主题。

于 2020-06-17T02:37:27.153 回答
0

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

tools:context=".MainActivity"
于 2020-06-17T13:46:57.480 回答