首页 文章

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

提问于
浏览
854

从最新的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" />

What is "tools:context" used for?

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

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

6 回答

  • 391

    这很可能是工具UI编辑器用于渲染布局的活动(它将根据活动找到正确的主题) . 这是记录here(在文章的中间;订阅该页面以保持最新) .

  • 360

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

  • 7

    根据Android Tools Project Site

    tools:context

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

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

  • 7

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

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

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

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

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

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

  • 0

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

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

  • 87

    1.说明

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

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

    2.样本

    拿一个简单的工具:文本,例如,一些更多的图像,方便进一步了解工具:上下文

    <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采用了android:text,并使用工具:TextView2中的文本,在Layout编辑器的右侧将显示示例name1,示例name2两种字体,如果运行代码后编译,生成apk,终端只显示样本名称1,不显示样本名称2的单词 . 你可以尝试跑,看看效果如何 .

    3.具体说明

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

    2.Only ADT 布局编辑器(即,对于模拟器右侧的上述图标)在当前布局文件中设置相应的渲染上下文,当前XML的布局呈现上下文是活动名称对应的活动,如果清单文件中的活动设置了一个主题,那么 ADT 布局编辑器将根据Theme.Means呈现您当前的布局,如果您将 MainActivity 设置为主题 . Light也可以(其他) . (理解:你添加了 tools: context = "activity name" ,XML布局是渲染指定的活动,在清单文件中 Build 一个主题,右上图模拟器主题样式也会跟随主题对应的变化 . )

    4.摘要

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

相关问题