ツール属性のリファレンス

Android Studio では tools 名前空間でさまざまな XML 属性がサポートされており、これを使用して設計時の機能(フラグメントに表示するレイアウトの選択など)やコンパイル時の動作(XML リソースに適用する圧縮モードの選択など)を有効にできます。この XML 属性はアプリのビルド時にビルドツールによって削除されるため、APK のサイズやランタイムの動作に影響しません。

使用するには、次のように、XML 属性を使用する各 XML ファイルのルート要素に tools 名前空間を追加します。

    <RootTag xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" >
    

エラー処理属性

次の属性により、lint の警告メッセージを抑制できます。

tools:ignore

対象: すべての要素

属性を使用するツール: lint

この属性を使用して、対象の要素またはその子要素に関する問題のうち lint で無視すべきものを、lint 問題 ID のカンマ区切りリストで指定できます。

たとえば、次のようにして MissingTranslation エラーを無視するよう指示できます。

<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
    

tools:targetApi

対象: すべての要素

属性を使用するツール: lint

この属性は、Java コードの @TargetApi アノテーションと同じように機能します。この要素をサポートする API レベル(整数またはコード名)を指定できます。

この属性では、この要素(およびすべての子)が指定された API レベル以上でのみ使用されるということをツールに伝えることができます。これにより、minSdkVersion として指定した API レベルで要素またはその属性が利用できない場合でも、lint から警告が表示されなくなります。

たとえば、GridLayout は API レベル 14 以上でのみ使用可能ですが、それに満たないバージョンではこのレイアウトを使用しないことが明白な場合は、この属性を使用します。

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:targetApi="14" >
    

ただし、代わりにサポート ライブラリGridLayout を使用する必要があります。

tools:locale

対象: <resources>

属性を使用するツール: lint、Android Studio エディタ

この属性を使用して、指定した <resources> 要素内のリソースのデフォルト言語(またはロケール)を指定できます(指定しない場合は英語と見なされます)。これにより、スペル チェッカーからの警告を回避できます。 値には、有効なロケール識別子を指定する必要があります。

たとえば、これを values/strings.xml ファイル(デフォルトの文字列値)に追加することで、デフォルトの文字列に使用される言語が英語ではなくスペイン語であることを示せます。

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:locale="es">
    

設計時ビュー属性

以下の属性は、Android Studio のレイアウト プレビューでのみ表示されるレイアウト特性を定義します。

tools:android: の代わりに)

対象: <View>

属性を使用するツール: Android Studio Layout Editor

android:の代わりに tools: 接頭辞を使用して Android フレームワークの任意の <View> 属性を指定すると、レイアウト プレビューにサンプルデータを挿入できます。これは、ランタイムまで入力されない属性値について、その影響を事前にレイアウト プレビューで確認する場合に便利です。

たとえば、android:text 属性値がランタイムに設定される場合、またはデフォルトとは異なる値を指定してレイアウトを表示する場合、tools:text を追加することで、レイアウト プレビューでのみ表示されるテキストを指定できます。

図 1. tools:text 属性によりレイアウト プレビュー用の値として「Google Voice」を設定

android: 名前空間属性(ランタイムに使用)と、それに対応する tools: 属性(レイアウト プレビュー時にのみランタイムの属性を上書き)の両方を追加できます。

tools: 属性を使用して、レイアウト プレビュー時にのみ属性を設定解除することもできます。たとえば、複数の子を持つ FrameLayout があり、レイアウト プレビューで表示させたい子は 1 つだけである場合、以下に示すように、レイアウト プレビューで子の 1 つを非表示に設定できます。

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="First" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Second"
        tools:visibility="invisible"  />
    

Design ビューで Layout Editor を使用する場合、[Properties] ウィンドウで設計時のビュー属性を編集することもできます。同じ名前の実際の属性と区別するために、設計時属性の名前の横にはレンチアイコン が表示されます。

tools:context

対象: すべてのルート <View>

属性を使用するツール: lint、Android Studio Layout Editor

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

図 2. onClick 属性のクイックフィックスは tools:context が設定されている場合にのみ機能する

マニフェスト ファイルと同じ接頭辞のドットを使用して(完全なパッケージ名を除く)、アクティビティ クラス名を指定できます。次に例を示します。

<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context=".MainActivity" >
    

ヒント: Layout Editor ツールバーからレイアウト プレビューのテーマを選択することもできます。

tools:itemCount

対象: <RecyclerView>

属性を使用するツール: Android Studio Layout Editor

この属性を使用して、指定した RecyclerView に対して [Preview] ウィンドウで Layout Editor によりレンダリングされるアイテム数を指定できます。

次に例を示します。

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:itemCount="3"/>
    

tools:layout

対象: <fragment>

属性を使用するツール: Android Studio Layout Editor

この属性を使用して、レイアウト プレビューでフラグメント内に描画されるレイアウトを宣言できます(レイアウト プレビューでは、レイアウトに通常適用されるアクティビティ コードを実行できないため)。

次に例を示します。

<fragment android:name="com.example.master.ItemListFragment"
        tools:layout="@layout/list_content" />
    

tools:listitem / tools:listheader / tools:listfooter

対象: <AdapterView>(および <ListView> などのサブクラス)

属性を使用するツール: Android Studio Layout Editor

これらの属性を使用して、リストのアイテム、ヘッダー、フッターについて、レイアウト プレビューに表示するレイアウトを指定できます。レイアウト内のすべてのデータ フィールドには、「アイテム 1」などの数値コンテンツが入力されるため、リストアイテムは繰り返されません。

次に例を示します。

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/sample_list_item"
        tools:listheader="@layout/sample_list_header"
        tools:listfooter="@layout/sample_list_footer" />
    

tools:showIn

対象: <include> によって参照されるレイアウトのルート <View>

属性を使用するツール: Android Studio Layout Editor

この属性を使用すると、このレイアウトをインクルードとして使用するレイアウトを指定できるため、このファイルを親レイアウトに埋め込んで表示した状態でプレビュー(および編集)できます。

次に例を示します。

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:showIn="@layout/activity_main" />
    

上記のようにすることで、activity_main レイアウト内にこの TextView レイアウトを埋め込んだ状態でレイアウト プレビューを表示できます。

tools:menu

対象: すべてのルート <View>

属性を使用するツール: Android Studio Layout Editor

この属性を使用して、レイアウト プレビューのアプリバーに表示するメニューを指定できます。値には、カンマ区切りで複数のメニュー ID を指定できます(@menu/ または同様の ID 接頭辞なし、.xml 拡張子なし)。次に例を示します。

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:menu="menu1,menu2" />
    

tools:minValue / tools:maxValue

対象: <NumberPicker>

属性を使用するツール: Android Studio Layout Editor

これらの属性を使用して、NumberPicker ビューの最小値と最大値を設定できます。

次に例を示します。

<NumberPicker xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/numberPicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:minValue="0"
        tools:maxValue="10" />
    

tools:openDrawer

対象: <DrawerLayout>

属性を使用するツール: Android Studio Layout Editor

この属性を使用して、Layout Editor の [Preview] ペインで DrawerLayout を開くことができます。次の値のいずれかを渡すことで、Layout Editor によるレイアウトのレンダリング方法を変更することもできます。

定数説明
end800005サイズを変更せずに、オブジェクトをコンテナの最後に配置します。
left3サイズを変更せずに、オブジェクトをコンテナの左側に配置します。
right5サイズを変更せずに、オブジェクトをコンテナの右側に配置します。
start800003サイズを変更せずに、オブジェクトをコンテナの最初に配置します。

次に例を示します。

<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:openDrawer="start" />
    

"@tools:sample/*" リソース

対象: UI テキストまたは画像をサポートするすべてのビュー。

属性を使用するツール: Android Studio Layout Editor

この属性を使用して、プレースホルダのデータまたは画像をビューに挿入できます。たとえば、まだアプリの UI テキストを最終決定していない状況で、テキストがレイアウトでどのように処理されるかをテストする場合、プレースホルダ テキストを次のように使用します。

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="@tools:sample/lorem" />
    

次の表に、レイアウトに挿入できるプレースホルダのデータの種類を示します。

属性の値プレースホルダのデータの説明
@tools:sample/full_names @tools:sample/first_names@tools:sample/last_names の組み合わせからランダムに生成されたフルネーム。
@tools:sample/first_names 一般的な名前。
@tools:sample/last_names 一般的な名字。
@tools:sample/cities 世界中の都市の名前。
@tools:sample/us_zipcodes ランダムに生成された米国の郵便番号。
@tools:sample/us_phones (800) 555-xxxx の形式でランダムに生成された電話番号。
@tools:sample/lorem ラテン語から派生したプレースホルダ テキスト。
@tools:sample/date/day_of_week 指定された形式でランダムに生成された日付と時刻。
@tools:sample/date/ddmmyy
@tools:sample/date/mmddyy
@tools:sample/date/hhmm
@tools:sample/date/hhmmss
@tools:sample/avatars プロフィール アイコンとして使用できるベクター ドローアブル。
@tools:sample/backgrounds/scenic 背景として使用できる画像。

リソース圧縮属性

以下の属性を使用することで、厳密な参照チェックを有効にして、リソース圧縮を使用するときに特定のリソースを保持するか破棄するかを宣言できます。

リソース圧縮を有効にするには、build.gradle ファイルで shrinkResources プロパティを true に設定します(コード圧縮の minifyEnabled も同時に設定)。次に例を示します。

android {
        ...
        buildTypes {
            release {
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'),
                        'proguard-rules.pro'
            }
        }
    }
    

tools:shrinkMode

対象: <resources>

属性を使用するツール: リソース圧縮が可能なビルドツール

この属性を使用すると、ビルドツールで「セーフモード」または「厳格モード」を使用するかどうかを指定できます。セーフモードでは圧縮を安全に実行し、明示的に引用されているリソースと、Resources.getIdentifier() への呼び出しで動的に参照されるかもしれないリソースのすべてを保持します。厳格モードでは、コードまたは他のリソースで明示的に引用されているリソースのみを保持します。

デフォルトでは、セーフモード(shrinkMode="safe")が使用されます。厳格モードを使用するには、次のように shrinkMode="strict"<resources> タグに追加します。

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:shrinkMode="strict" />
    

厳格モードを有効にして、実際には必要なリソースが削除された場合、そのリソースを保持するには tools:keep を使用する必要があります。また、明示的にさらに多くのリソースを削除するには、 tools:discard を使用する必要があります。

詳細については、リソースの圧縮をご覧ください。

tools:keep

対象: <resources>

属性を使用するツール: リソース圧縮が可能なビルドツール

リソース圧縮を使用して未使用のリソースを削除する場合、この属性を使用して保持するリソースを指定できます。これは通常、リソース名が動的に生成されて Resources.getIdentifier() に渡されるなど、リソースがランタイムに間接的に参照される場合に行います。

使用するには、リソース ディレクトリ(例: res/raw/keep.xml)に <resources> タグを含む XML ファイルを作成し、tools:keep 属性で保持する各リソースをカンマ区切りのリストとして指定します。また、アスタリスク文字をワイルドカードとして使用できます。次に例を示します。

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@layout/used_1,@layout/used_2,@layout/*_3" />
    

詳細については、リソースの圧縮をご覧ください。

tools:discard

対象: <resources>

属性を使用するツール: リソース圧縮が可能なビルドツール

リソース圧縮を使用して未使用のリソースを削除する場合、この属性を使用して手動で破棄するリソースを指定できます。これは通常、リソースは参照されていてもアプリにとって何の意味もない場合や、Gradle プラグインの誤りでリソースが参照されていると推測した場合に行います。

使用するには、リソース ディレクトリ(例: res/raw/keep.xml)に <resources> タグを含む XML ファイルを作成し、tools:discard 属性で保持する各リソースをカンマ区切りのリストとして指定します。また、アスタリスク文字をワイルドカードとして使用できます。次に例を示します。

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:discard="@layout/unused_1" />
    

詳細については、リソースの圧縮をご覧ください。