LECTURE 3 リソースについて

○ はじめに

Android SDK(というより Android アプリケーション)では、文字列や画像等をリソースとして扱うことができます。リソース化したデータは全て、SDK によって自動生成される R.java に定義されるリソース ID を用いて簡単に参照することができます。

ここでは、Android SDK でどの様なデータをリソースとして扱うことができるのか、概要を調べてみたいと思います。自分も全て使ってみたわけでは無いので、よく分かっていない部分もあります。より具体的には、実際にそれらのリソースを使用する際に随時説明したいと思います。

○ リソースの種類と格納場所

Android SDK で扱えるリソースの種類については、App Resourcesで説明されています。Resource Typesで説明されている内容を意訳します。なお、基本的にはファイル名ではなく、用意した xml ファイルのタグでリソースが判別される様です。

リソースの種類 res/以下の格納場所 内容
アニメーション res/anim、res/drawable 予め動きが決定されたアニメーションを定義します。ある画像に対する変形等のエフェクトによるアニメーションの場合はres/animに、複数画像を繋ぐことによるアニメーションの場合はres/drawableにxmlファイルを置きます。
View状態に応じた色 res/color android.view.Viewクラス(および派生したウィジェット)が持つ状態に応じて変化させる色を定義します。res/colorにxmlファイルを置きます。
画面に表示するグラフィック定義(画像、状態に応じて変化するグラフィック、他の表示をクリップするグラフィック等) res/drawable 画面に表示するグラフィックを定義したファイルをres/drawableに置きます。画像の場合は *.png、*.jpg、*.gif、*.9.pngをサポートしています。
UI レイアウト res/layout UI 上に表示するウィジェット等のレイアウトを記述した xml ファイルを置きます。Android では、プログラムコードで UI を作成することももちろん可能ですが、どちらかというと xml ファイルにレイアウトを書くことでコードと UI レイアウトを分離する方法がお勧めの様です。前回 の MainActivity.java 中で setContentView(R.layout.main); としている部分が、xml に記述したレイアウトを適用している箇所です。
アプリケーションメニュー res/menu アプリケーションメニュー(オプションメニュー、コンテキストメニュー、サブメニュー)を定義した xml ファイルを置きます。
文字列 res/values 文字列や、文字列の配列等を定義した xml ファイルを置きます。
UI スタイル res/values UI スタイル(フォントサイズ、フォント色等)を定義した xml ファイルを置きます。
その他 res/values いろんなリソースを定義した xml ファイルをここに置くことが出来ます。下記のリソースが定義可能です。
  • Bool (論理値)
  • Color (色定義:colors.xml)
  • Dimension (mm、px 等、単位を持った数値)
  • ID (ユニークなID値。Android developer tools でユニーク値を作成可能 )
  • Integer (整数)
  • Integer Array (整数配列)
  • Typed Array (他のリソースの配列)
より詳細には、SDK ドキュメントを参照してください。本文書でも、実際に使う時には説明します。

○ UI レイアウト定義ファイル

UI レイアウト定義ファイルは、res/layout 以下に xml ファイルとして格納します。画面に表示する android.view.View(サブクラス)のツリー構造を記述します。

例として 前回 の UI レイアウト定義ファイルである res/layout/main.xml を以下に掲載します。

    1	<?xml version="1.0" encoding="utf-8"?>
    2	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3	    android:orientation="vertical"
    4	    android:layout_width="fill_parent"
    5	    android:layout_height="fill_parent"
    6	    >
    7	<TextView
    8	    android:layout_width="fill_parent"
    9	    android:layout_height="wrap_content"
   10	    android:text="Hello World, MainActivity"
   11	    />
   12	</LinearLayout>
   13	

このファイルで定義されているツリー構造は

  • android.widget.LinearLayout
    • android.widget.TextView

です。android.widget.LinearLayout は、複数の View を画面上にレイアウトするためのレイアウト管理用クラスの一つです(android.view.View のサブクラスである android.view.ViewGroup を継承している)。android.widget.TextView は、文字列表示用の UI 部品です。

ポイントは、以下の様な感じです。

  • 最上位の View のタグには xmlns:android="http://schemas.android.com/apk/res/android" を付ける
  • 各 View のタグに android:xxxx 形式の属性を指定することで、プロパティを設定できる
  • android:layout_width/android:layout_height に指定している fill_parent/wrap_content はそれぞれ "親要素いっぱいに広げる/表示内容に応じた大きさにする" という意味

○ 文字列リソース定義ファイル

文字列リソース定義ファイルは res/values/strings.xml として格納します。例として 前回 の文字列リソース定義ファイルである res/values/strings.xml を以下に掲載します。

    1	<?xml version="1.0" encoding="utf-8"?>
    2	<resources>
    3	    <string name="app_name">MainActivity</string>
    4	</resources>

<resources></resources> で囲んだ範囲に、<string name="リソース名">文字列</string> として文字列リソースを定義します。

○ 色リソース定義ファイル

色リソース定義ファイルは res/values/colors.xml として格納します。以下に例を掲載します。

    1	<?xml version="1.0" encoding="utf-8"?>
    2	<resources>
    3	    <color name="red">#ff0000</color>
    4	    <color name="green">#00ff00</color>
    5	    <color name="blue">#0000ff</color>
    6	</resources>

<resources></resources> で囲んだ範囲に、<color name="リソース名">色定義</color> として色リソースを定義します。色定義は、以下のいずれかの形式で記述します。

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

RGB はそれぞれ赤緑青成分です。A は Alpha 成分を表していて、0(AA の場合は 00)で完全に透明、f(AA の場合は ff)で非透明を表します。