Android アプリ開発で使える XML の Tools 属性
Android アプリのための XML ファイルには、開発時にのみ使用される追加的な情報を書くために使用される名前空間が用意されています。
http://schemas.android.com/tools
というのがその名前空間で、普通は名前空間接頭辞 (プレフィクス) tools:
に結び付けられます。
上のページを見ながら、どういったことができるのかを紹介します。 『This document records our current uses of tools attributes. (NOTE: These may change over time.)』 と書かれているので、最新の情報は上のページを見て確認してください。
Tools 属性を使ってできること
tools:ignore
どの XML 要素にも付けることができる。 値はカンマで区切られた lint の issue ID のリスト。 Lint による検査時、指定された要素とその子孫要素について、指定された lint の issue が無視されるようになる。
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
Java における @TargetApi
アノテーションと似たもの。 指定の要素がどの API level 以上で解釈可能なものなのかを、API level のコードネームか整数で指定することができる。
<GridLayout tools:targetApi="ICE_CREAM_SANDWICH" >
これも lint による検査時に使用される。
例えば android:actionBarStyle
を API Level 11 より古い Android も対象にしているアプリで使うと 『android:actionBarStyle requires API Level 11 (current min is 7)』 ってエラーが lint で出されるけど、そういう場合にこの属性を使えば良い。
<!-- android:actionBarStyle は API Level 11 以降でしか使えない --> <item name="android:actionBarStyle" tools:targetApi="11">@style/MyActionBar</item> <!-- API Level 11 より古いものに対しては次のように記述することで対応できる (サポートライブラリの機能) --> <item name="actionBarStyle">@style/MyActionBar</item>
tools:locale
リソースファイルのルート要素にセットすることができるもので、その値は言語と地域 (オプション) を指定するものである。 この値を指定することで、ファイル中の文字列の言語 (ロケール) が何であるかをツールに知らせることができる。 例えば、values/strings.xml のルート要素を次のように指定すると、文字列の言語が英語ではなくスペイン語であると指定したことになる。
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="es">
これらは lint で使われるのと、Android Studio でも使われる模様。 (英語でないリソースについてはスペル検査が無効になるっぽい。)
tools:context
この属性は、典型的にはレイアウト XML ファイルのルート要素に付けられるもので、そのレイアウトがどのアクティビティで使われるものかを指定する (この値は単にデザイン時に使われるもの; 実際にはそのレイアウトをどのアクティビティと一緒に使っても問題ない)。 この値を指定しておくことで、例えばレイアウトエディタがデフォルトテーマを決めたりできるようになる。 Manifest ファイル中でのドットでのデフォルトパッケージ名の省略と同じことがこの属性の値でも可能。
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity" ... >
この属性は Android Studio と Eclipse のレイアウトエディタや、lint で使用される。
tools:layout
典型的には fragment
要素に付けられるもので、デザイン時にどのレイアウトを使用してほしいかを指定するものである。
<fragment android:name="com.example.master.ItemListFragment" tools:layout="@android:layout/list_content" />
Android Studio と Eclipse のレイアウトエディタで使用される。
tools:listitem
/ listheader
/ listfooter
これらの属性は ListView
(や、GridView
や ExpandableListView
などの他の AdapterView
の子クラス) で使用されるもので、リスト項目やヘッダ、フッタとしてデザイン時に使用されるレイアウトを指定するものである。
<ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" tools:listitem="@android:layout/simple_list_item_2" />
Android Studio と Eclipse のレイアウトエディタで使用される。
Designtime Layout Attributes
Android Studio 0.2.11 からは、デザイン時にのみ使用されるレイアウト属性を指定することができるようになっています。
例えば、開発時には表示されるデータが決まっていないレイアウトの TextView
に何からしらの文字を表示してレイアウトエディタで表示させたいことってよくありますよね。 そういう場合は、android:text
の代わりに tools:text
を使うことで、デザイン時にレイアウトエディタに表示させる文字列を指定できます。
<TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="タイトルです" />
もちろん、android:text
と tools:text
の両方を指定することもできます。
tools:text
に限らず、一般的に任意の Android フレームワークの属性 (android:
名前空間 (http://schemas.android.com/apk/res/android
) に属する属性) と同じローカル名を持つ tools:
名前空間 (http://schemas.android.com/tools
) の属性を使用することで、デザイン時にのみ有効な値を設定できます。
まとめ
関連記事
- Android 「xmlns:tools」「tools:context」ってなんだろう?【Android TIPS】 | エンジニア転職求人情報×IT人材紹介@SAK :
tools:context
属性について詳し目に書かれています。 - Android Tips #11 ADT revision 17のLintの機能追加について | Developers.IO :
tools:ignore
属性について詳し目に書かれています。