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


当前回答

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

其他回答

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

tools:context=".MainActivity"
<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预览将自动为你选择必要的主题。

根据Android工具项目网站:

工具:上下文

This attribute is typically set on the root element in a layout XML file, and records which activity the layout is associated with (at designtime, since obviously a layout can be used by more than one layout). This will for example be used by the layout editor to guess a default theme, since themes are defined in the Manifest and are associated with activities, not layouts. You can use the same dot prefix as in manifests to just specify the activity class without the full application package name as a prefix.

<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

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

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

现在,我们只使用它来做一件事:为布局选择正确的主题(因为清单文件可以为活动注册主题,一旦我们知道与布局相关的活动,我们就可以为布局选择正确的主题)。在未来,我们将使用它来驱动其他特性——例如呈现操作栏(与活动相关联),添加onClick处理程序的地方,等等。

这是一个tools: namespace属性的原因是,这只是一个供工具使用的设计时映射。布局本身可以被多个活动/片段等使用。我们只是想给你一个选择设计时绑定的方法这样我们就可以展示正确的主题;你可以随时改变它,就像你可以改变我们的listview和fragment绑定,等等。

(这里是完整的变更集,其中有更多的细节)

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

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