2017/10/10

aapt:attr でリソースファイル数を節約する

layer-listselector など, リソースがまた別のリソースを参照する場合があります.

<selector ...>
  <item android:drawable="@drawable/image01" />
  <item android:drawable="@drawable/image02" />

image01image02 がベクタードロワブルの場合は, 新たに image01.xml, image02.xml と2つのドロワブルリソースを用意する必要があります.

  • selectorlayer-list の定義ファイル
  • image01.xml
  • image02.xml

image01image02 が他リソースでも使われている共通化されたリソースであれば良いのですが, 他では使われず, ここでしか参照されない場合は1つのリソースファイルとしてまとめて定義できた方が管理が楽です.

そうした場合は aapt:attr タグが使えます.

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:aapt="http://schemas.android.com/aapt">
  <item>
    <aapt:attr name="android:drawable">
      <vector ... >
        <path ... />
      </vector>
    </aapt:attr>
  </item>
</selector>

<aapt:attr> タグで指定したリソースは, aaptによってリソースファイルとして抽出・生成され, name属性名の値は, 親タグの同属性に指定のリソースを設定する動作となります.
この機能は全てのAndroidバージョンで利用できます.

以上です.