【问题标题】:What's "tools:context" in Android layout files?Android布局文件中的“工具:上下文”是什么?
【发布时间】:2012-06-20 03:58:12
【问题描述】:

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

【问题讨论】:

  • 是的,我想知道我还错过了什么(没有在“新功能”部分看到),因为我总是安装最新的 adt&sdk 版本(当前使用 adt&sdk 20 预览版 3)。
  • 另外,请在此处查看官方文档:tools.android.com/tech-docs/tools-attributes#TOC-tools:context>。
  • 我的应用在没有上下文的情况下仍然可以工作。
  • @user132522 一切都与开发有关,在 IDE 本身中。不适用于运行应用程序时

标签: android xml android-layout android-context android-tools-namespace


【解决方案1】:

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

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

【讨论】:

  • 我明白了。根据此处的屏幕截图:tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/…,这意味着不必是扩展 Context 的类,对吗?如果是这样,我认为它比你所说的更有效,虽然我不确定是什么。
  • Activity 扩展了Context,所以不确定您的意思?它可能确实做得更多,如果您有兴趣,请查看源代码,它是可用的。我不知道任何细节。
  • 哎呀。我没有正确阅读屏幕截图的文字。对不起。当悬停在我展示的内容上时,它还说它可以是一个片段,但片段没有在任何地方写下它们的主题,不是吗?无论如何,我仍然不确定这个新属性有什么用。不知道新的 google io 是否会告诉我们这一点。
  • 他们制作了一个展示此功能的新视频:youtube.com/…
【解决方案2】:

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

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

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

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

是的,上面列出的the link Nikolay 展示了新配置选择器的外观和工作方式

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

【讨论】:

  • 如果没有基础包,它如何知道活动的完整路径?它会查看清单文件吗?
  • 是的,它的处理方式与清单文件中的活动注册相同,您也可以在名称属性中省略包。如有必要,它会在清单文件根元素中添加包声明。
  • 不错。所有这些(以及更多)都会在 google io 2012 上展示吗?我迫不及待地想知道新功能。 :)
  • 在为新项目生成的 XML 中,它会将 tools:context 值放在 TextView 字段上。既然这听起来像是将主题应用于整个布局的全局用例,为什么不将它放在根布局中?
  • 我添加了一个文档,其中记录了我们当前的工具属性:tools.android.com/tech-docs/tools-attributes
【解决方案3】:

根据Android Tools Project Site

工具:上下文

此属性通常设置在布局 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 中的布局编辑器

【讨论】:

    【解决方案4】:

    1.说明

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

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

    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,而在TextView2中使用了tools:text,在Layout编辑器的右侧会显示sample name1sample name2这两种字体,如果之后你运行代码编译,生成apk,终端只显示sample name1,不显示sample name2字样。可以尝试运行一下,看看效果如何。

    3.具体说明

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

    2.只有ADTLayout Editor(即为模拟器右侧的上述图标)在当前Layout文件中设置对应的渲染上下文,当前XML在渲染上下文中的Layout就是activity名称对应activity,如果manifest文件中的activity设置了一个Theme,那么ADTLayout Editor会根据这个Theme来渲染你当前的Layout。意思就是如果你设置了MainActivity就设置了一个Theme。 Light也可以是(other)。(理解:你加了tools: context = "activity name",XML布局是渲染指定的activity,在manifest文件中建立一个Theme,上图右边模拟器的Theme风格也会跟着Theme对应的变化。)

    4.总结

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案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。因此,您可以使用与 Manifest 文件中相同的点前缀来指定活动类名称。

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

            【讨论】:

              【解决方案9】:

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

              tools:context=".MainActivity"
              

              【讨论】:

                猜你喜欢
                • 2019-03-05
                • 2013-10-08
                • 2015-09-16
                • 2017-06-06
                • 1970-01-01
                • 2011-05-11
                • 2016-12-16
                相关资源
                最近更新 更多