Android布局文件中的"工具:上下文"是什么?

and*_*per 908 xml android android-context android-layout android-tools-namespace

从最新的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" />
Run Code Online (Sandbox Code Playgroud)

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

它怎么知道写在那里的活动的确切路径?它是否在清单中查看应用程序的包?

它仅限于扩展Context或仅扩展活动的类吗?它可用于ListView项目等吗?

Nik*_*kov 423

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

此属性声明默认情况下此布局与哪个活动相关联.这使得编辑器或布局预览中的功能需要活动知识,例如布局主题在预览中应该是什么以及从quickfix制作插件时插入onClick处理程序的位置

  • 他们制作了一个显示此功能的新视频:http://www.youtube.com/watch?feature = player_embedded&v = Erd2k6EKxCQ#t = 1166s (25认同)
  • `Activity`扩展`Context`,所以不确定你的意思?它可能确实做得更多,如果你有兴趣,检查源代码,它是可用的.我不知道任何细节. (2认同)

Tor*_*bye 373

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

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

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

(这里是这对更详细信息的完整变更)

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

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

  • 我添加了一个记录我们当前工具属性的文档:http://tools.android.com/tech-docs/tools-attributes (3认同)
  • 是的,它的处理方式与清单文件中的活动注册相同,您也可以在name属性中省略包.如有必要,它会在清单文件根元素前面添加包声明. (2认同)

ano*_*der 90

根据Android工具项目网站:

工具:上下文

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

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">  
Run Code Online (Sandbox Code Playgroud)

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


KeL*_*yue 12

1.Description

tools: context = "activity name"它不会打包到apk.Only ADTLayout Editor中,在你当前的Layout文件中设置相应的渲染上下文,显示你当前的Layout,渲染上下文是活动名称对应的活动,如果manifest文件中的活动设置了一个Theme,那么ADT布局编辑器将根据Theme.Means呈现当前布局,如果您将MainActivity集合设置为主题.Light(另一个),然后你在视觉布局管理器中看到o后台控制应该是什么主题.光看起来像.只是告诉你你所看到的是你得到的结果.

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

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" />
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

3.具体说明

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

2.只有ADT布局编辑器(即模拟器右侧的上述图标)在当前布局文件中设置相应的渲染上下文,当前XML的布局呈现上下文是活动名称对应的活动,如果清单文件中的活动设置一个主题,然后ADT布局编辑器将根据Theme.Means呈现您当前的布局,如果您MainActivity设置一个主题.Light也可以是(其他).(理解:你补充说tools: context = "activity name",XML布局是渲染指定的活动,在清单文件中建立一个主题,如上图右模拟器主题样式也将遵循与主题相对应的更改.)

4.summary

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


Mih*_*tel 7

"tools:context"是可以在开发框架中促进XML格式创建的设计属性之一.此属性用于向开发框架显示为实现布局而选择的活动类.使用"工具:上下文",Android Studio会自动为预览选择必要的主题.

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