Androidレイアウトファイルの「tools:context」とは何ですか?


937

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」は何に使用されますか?

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

コンテキストを拡張するクラスに限定されているのですか、それともアクティビティのみですか ListViewアイテムなどに使用できますか?


はい、私は常に最新のadt&sdkバージョン(現在はadt&sdk 20プレビュー3を使用)をインストールしているため、他に何を見逃しているのか(「新着情報」セクションに表示されていません)。
Android開発者、


2
私のアプリはまだコンテキストなしで動作します。
最も由緒ある卿

1
@ user132522 IDE自体での開発がすべてです。アプリを実行するときは対象外
Android開発者

回答:


440

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

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


そうですか 。ここのスクリーンショットによると:tools.android.com / _ / rsrc / 1337185954574 / recent / newconfigchooser / 、それはContextを拡張するクラスである必要はないということですよね?もしそうなら、私はそれがあなたの言っていることよりも多くをすると思います、しかし私は何がわかりません。
Android開発者

2
Activityextends Contextなので、どういう意味かわかりませんか?それは確かにもっとや​​っているかもしれません、興味があれば、ソースコードをチェックしてください、それは利用可能です。詳細はわかりません。
Nikolay Elenkov

おっとっと 。スクリーンショットのテキストを正しく読みませんでした。私が示したものにカーソルを合わせると、フラグメントになる可能性があることも示されますが、フラグメントにはテーマがどこにも書かれていません。とにかく、私はまだこの新しい属性が何であるかわかりません。新しいgoogle ioがこれについて教えてくれるのだろうか。
Android開発者、

25
:彼らはショーこの機能という新しいビデオを作ったyoutube.com/...
Androidデベロッパー


380

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

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

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

(ここに詳細を持っているフルチェンジだこれは

そして、ええ、上記のリンク Nikolayは、新しい構成チューザーがどのように見え、機能するかを示しています

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


基本パッケージがない場合、アクティビティへの完全なパスをどのようにして知るのですか?それはマニフェストファイルを見ますか?
android開発者

2
はい、それはマニフェストファイル内のアクティビティ登録と同じ方法で処理されます。name属性でパッケージを省略することもできます。必要に応じて、マニフェストファイルのルート要素からパッケージ宣言を追加します。
Tor Norbye 2012年

いいね。これらすべて(およびそれ以上)がgoogle io 2012に表示されますか?新機能について聞いて待ちきれません。:)
android開発者

1
新しいプロジェクト用に生成されたXML tools:contextでは、TextViewフィールドに値を配置します。これはレイアウト全体にテーマを適用するグローバルな使用例のように聞こえるので、なぜそれがルートレイアウトに配置されないのですか?
Jason Robinson

3
現在のツール属性を説明するドキュメントを追加しました:tools.android.com/tech-docs/tools-attributes
Tor Norbye

92

よると、Androidのツールプロジェクトサイト

ツール:コンテキスト

この属性は通常、レイアウト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


14

1.説明

tools: context = "activity name"現在のレイアウトファイルセットの対応するレンダリングコンテキストでapkのみADTレイアウトエディターにパッケージ化されません。ファイル内のアクティビティがmanifestテーマを設定している場合、コンテキストのレンダリングで現在のレイアウトがアクティビティ名に対応していることを示します。ADTLayout Editorは、Themeに従って現在のレイアウトをレンダリングしますMainActivity。セットをテーマに設定した場合、そのことを意味します。ライト(もう1つ)の場合は、ビジュアルレイアウトマネージャーに、テーマとなるもののバックグラウンドコントロールが表示されます。光は次のように見えます。見ているものを表示するだけで、結果が得られます。

一部の人々はいくつかを理解しますが、一部の人々はまた、それを知らないのを見ます、私は説明のいくつかの単語を追加します:

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し、使用 tools:text中にTextView表示されるレイアウトエディタの右側に、2 sample name1sample name2、生成されたコンパイルするためのコードを実行した後ならば、2つのフォントをapkのみ、端末ディスプレイをsample name1、表示されませんsample name2言葉を。実行してみて、効果を確認してください。

3.具体的な説明

1. tools: context = "activity name"パッケージ化されませんapk(理解:これと同等のものはコメントされ、コンパイルされた効果はありません)。

2. ADT現在のレイアウトファイルのレイアウトエディターのみ(つまり、シミュレーターの右側にある上記のアイコン用)は、対応するレンダリングコンテキストを設定します。コンテキストのレンダリングにおける現在のXMLのレイアウトは、アクティビティ名がアクティビティに対応する場合、マニフェストファイルのアクティビティがテーマを設定すると、ADTLayout EditorはTheme に従って現在のレイアウトをレンダリングしますMainActivity。このセットを設定した場合、テーマを意味します。ライトは(その他)にすることもできます(理解:追加tools: context = "activity name"、XMLレイアウトは指定されたアクティビティをレンダリングし、マニフェストファイルにテーマを確立します。右上のシミュレーターのテーマ画像は、テーマに対応する変更に従います)。

4.まとめ

要約すると、これらのプロパティは主に、適切なツールの上に向けられており、シミュレータのデバッグ時間表示ステータス、およびコンパイルは機能しません


7

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

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


3

これは最善の解決策です: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


0

tools:context=".MainActivity" thislineはxmlファイルで使用され、このxmlファイルへのアクセスに使用されるJavaソースファイルを示します。これは、特定のJavaファイルのこのxmlプレビューを表示することを意味します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.