1005

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

「tools:context」は何に使用されますか?

そこに書かれているアクティビティへの正確なパスをどうやって知るのでしょうか? マニフェスト内のアプリのパッケージを調べますか?

Context を拡張するクラスまたはアクティビティのみに限定されますか? ListViewのアイテムなどに使えますか?

4

9 に答える 9

492

これは、ツール UI エディターがレイアウト プレビューをレンダリングするために使用するアクティビティです。ここに文書化されています:

この属性は、このレイアウトがデフォルトで関連付けられているアクティビティを宣言します。これにより、エディターまたはレイアウト プレビューで、プレビューでのレイアウト テーマの内容や、クイックフィックスから onClick ハンドラーを作成するときに onClick ハンドラーを挿入する場所など、アクティビティに関する知識を必要とする機能が有効になります。

于 2012-06-18T07:56:54.150 に答える
394

その属性は基本的に、レイアウトの上の「関連付けられたアクティビティ」の選択の永続性です。実行時に、レイアウトは常にアクティビティに関連付けられます。もちろん、複数に関連付けることができますが、少なくとも 1 つに関連付けることができます。ツールでは、特定の機能を駆動するために、このマッピング (実行時に反対方向に発生します。アクティビティは setContentView(layout) を呼び出してレイアウトを表示できます) について知る必要があります。

現在、これを使用しているのは 1 つのことだけです: レイアウトに表示する適切なテーマを選択する (マニフェスト ファイルはアクティビティに使用するテーマを登録できるためレイアウトに関連付けられたアクティビティがわかれば、選択できます)レイアウトに表示する適切なテーマ)。将来的には、これを使用して、アクション バー (アクティビティに関連付けられている) のレンダリング、onClick ハンドラーを追加する場所などの追加機能を推進します。

これが tools: 名前空間属性である理由は、これがツールで使用する設計時のマッピングにすぎないためです。レイアウト自体は、複数のアクティビティ/フラグメントなどで使用できます。たとえば、適切なテーマを表示できるように、デザインタイム バインディングを選択する方法を提供したいだけです。リストビューやフラグメントバインディングなどを変更できるのと同じように、いつでも変更できます。

(これについての詳細が記載されている完全な変更セットは次のとおりです)

ええ、上記の Nikolayのリンクは、新しい構成セレクターの外観と機能を示しています。

もう 1 つ: "tools" 名前空間は特別です。Android パッケージ ツールはそれを無視することを認識しているため、これらの属性はいずれも APK にパッケージ化されません。レイアウトの追加のメタデータに使用しています。また、たとえば、lint 警告を抑制するための属性が保存される場所でもあります (tools:ignore として)。

于 2012-06-19T23:33:55.893 に答える
97

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

于 2014-02-20T16:16:18.887 に答える
7

「tools:context」は、開発フレームワークで XML でのレイアウト作成を容易にするデザイン属性の 1 つです。この属性は、レイアウトを実装するために選択されたアクティビティ クラスを開発フレームワークに示すために使用されます。「tools:context」を使用して、Android Studio はプレビューに必要なテーマを自動的に選択します。

Android アプリ開発のその他の属性や便利なツールについて詳しく知りたい場合は、次のレビューをご覧ください: http://cases.azoft.com/4-must-know-tools-for-effective-android -発達/

于 2016-07-13T11:08:28.047 に答える
0
<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 の基本的な必要性は、レイアウト ファイルがデフォルトでどのアクティビティまたはフラグメントに関連付けられているかを伝えることです。そのため、マニフェスト ファイルで使用されているのと同じドット プレフィックスを使用して、アクティビティ クラス名を指定できます。

そうすることで、Android Studio がプレビューに必要なテーマを自動的に選択するので、プレビュー設定を手動で行う必要はありません。レイアウト ファイルを複数のアクティビティに関連付けることができることは周知のとおりですが、テーマはマニフェスト ファイルで定義され、これらのテーマはアクティビティに関連付けられています。そのため、レイアウト ファイルに tools:context を追加すると、Android Studio のプレビューで必要なテーマが自動的に選択されます。

于 2020-06-17T02:37:27.153 に答える