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

“工具:上下文”的用途是什么?

它怎么知道写在那里的活动的确切路径?它会查看manifest里面的应用程序包吗?

它局限于扩展Context的类还是仅仅局限于活动?它对ListView项目等有用吗?


当前回答

这是UI编辑器用来渲染布局预览的工具。它被记录在这里:

此属性声明默认情况下该布局与哪个活动相关联。这使得编辑器或布局预览中需要活动知识的功能成为可能,例如预览中的布局主题应该是什么,以及当您从快速修复中制作这些时,在哪里插入onClick处理程序

其他回答

这是UI编辑器用来渲染布局预览的工具。它被记录在这里:

此属性声明默认情况下该布局与哪个活动相关联。这使得编辑器或布局预览中需要活动知识的功能成为可能,例如预览中的布局主题应该是什么,以及当您从快速修复中制作这些时,在哪里插入onClick处理程序

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

tools:context=".MainActivity"

其他答案所缺少的一个东西是任何类的上下文部分,可以与任何扩展上下文的类一起使用。

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

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

它正在查看清单内的应用程序包。它被用来知道被写在那里的活动的确切路径。

context属性可以与任何扩展context的类一起使用,比如活动、服务或应用程序。然而,它最常用于Activity类,因为它们是大多数应用程序的主要入口点。

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

<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>

在上面的代码中,工具:context的基本需求是默认情况下告诉布局文件与哪个活动或片段相关联。因此,您可以使用与Manifest文件中使用的相同的点前缀指定活动类名。

通过这样做,Android Studio将自动为预览选择必要的主题,你不必手动进行预览设置。我们都知道一个布局文件可以与几个活动相关联,但是主题是在Manifest文件中定义的,这些主题与您的活动相关联。因此,通过在布局文件中添加tools:context, Android Studio预览将自动为你选择必要的主题。

工具:上下文= "。MainActivity” 这一行在XML文件中使用,指示使用哪个Java源文件来访问该XML文件。 这意味着为特定的Java文件显示XML预览。