Android TIPS No.02 リソースディレクトリの構造
リソースディレクトリの構造
リソースディレクトリは以下のドキュメントで定義されている。
http://developer.android.com/guide/topics/resources/providing-resources.html
リソースはプロジェクト直下のresディレクトリ以下に以下の分類で配置する。
ディレクトリ | リソースタイプ |
---|---|
anim | Tweenアニメーションを定義するファイル。 |
color | カラーステートリストを定義するファイル。 |
drawable | pngやjpg、gifファイル等のdrawableファイル。 |
layout | ユーザーインターフェースの定義ファイル。 |
menu | オプションメニュー、コンテキストメニュー、サブメニュー等のアプリケーションメニューの定義ファイル。 |
raw | バイナリデータ |
values | 単純な文字列や数値や色の定義ファイル。 |
xml | 任意のXMLファイル。 |
リソースは環境や端末の状態により動的に変更することができる。リソースの定義は以下のようになる。
<resource-name>-<config-qualifier>
ここでそれぞれの意味は以下のようになる。
要素 | 説明 |
---|---|
resource-name | 先の表で説明したリソースの名前。layout、drawable等。 |
config-qualifier | 特定の設定で使用される修飾子。具体的には以下で説明する。 |
config-qualifierは「-」区切りで複数指定できる。設定はそれぞれ別のディレクトリに保管する。以下に使用できるconfig-qualifierを示す。先に書いたとおり「-」区切りで複数のconfig-qualifierを指定することができる。その場合には、以下の表に示す順番で使用しなければならない。以下の一覧で特定のバージョンから使用できるようになったもののみバージョンを明示している。
識別子 | 値(例) | 説明 |
---|---|---|
MCC、MNC | mcc440 mcc440-mnc10 |
モバイルの国コード(Mobile Country Code)を指定する。日本はmcc440となる。オプションとして「-」で区切ってモバイルネットワークコード(Mobile Network Code)つまりキャリアも指定できる。MMCの一覧は以下が詳しい。 http://en.wikipedia.org/wiki/Mobile_Network_Code |
言語と地域 | en、fr、ja、ja-JP | ISO 639-1の言語コード。日本語はja。一覧は以下。 http://www.loc.gov/standards/iso639-2/php/code_list.php また、地域も合わせて指定できる。地域はISO 3166-1-alpha-2で定義されている。日本の場合には地域で言葉が違わないためJPのみがある。一覧は以下。 http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm |
スクリーンサイズ | small normal large xlarge |
API Level 4から追加された。xlargeのみAPI Level 9で追加された。 サイズの詳細は以下のページのTable 1を参照。 http://developer.android.com/guide/practices/screens_support.html |
スクリーンアスペクト | long notlong |
API Level 4から追加された。 longは4:3より比率が高いたとえば16:9の解像度。たとえば、WQVGA、WVGA、FWVGA等。 nolongは4:3の比率のスクリーン。たとえば、QVGA、HVGA、VGA等。 |
スクリーンの向き | port land |
portは縦向き。 landは横向き。 |
ドックモード | car desk |
API Level 8から追加された。 carはカードックにある状態。 deskはデスクドックにある状態。 |
夜間モード | night notnight |
API Level 8から追加された。 nightは時間帯が夜間。 nonightは時間帯が昼間。 |
スクリーン密度(dpi) | lppi mdpi hdpi xhdpi nodpi |
API Level 4から追加された。xhdpiはAPI Level 8で追加された。 ldpiは120dpi。mdpiは160dpi。hdpiは240dpi。xhdpiは320dpi。nodpiはbitmapリソースのために使われる。 |
タッチスクリーンタイプ | notouch stylus finger |
notouchはデバイスがタッチスクリーンでない場合。 stylusはデバイスがスタイラスを使うタイプのタッチスクリーンの場合。 fingerはタッチスクリーンの場合。 |
利用できるキーボード | keysexposed keyshidden keyssoft |
keysexposedはキーボードが利用可能な状態。 keyshiddenはキーボードが使用不可能な状態。 keyssoftはソフトウェアキーボードが利用可能な状態。 |
優先テキスト入力メソッド | nokeys qwerty 12key |
nokeysはテキスト入力用のハードウェアキーがない。 qwertyはハードウェアのqwertyキーボードが付いている(それが見えている状態かどうかに関わらず。おそらくスライドしてキーを出すようなタイプで見えていなくても、ということ)。 12keyはハードウェアの12-key(通常の電話専用のキー配列の12個のキー)が付いている。 |
利用可能ナビゲーションキー | navexposed navhidden |
navexposedはナビゲーションキーが利用可能。 navhiddenはナビゲーションキーが利用できない。 |
タッチしない優先ナビゲーションメソッド | nonav dpad tracball wheel |
nonavは特別なナビゲーション用のキーがない。タッチスクリーンで代用する。 dpadはd-padナビゲーションがある。 tracballはtracballがある。 wheelはwheelがある。 |
システムバーション(APIレベル) | v4 v7 v8 |
デバイスがサポートするAPIレベル。 |
ここで1つ例をあげる。スクリーンアスペクトの動作を確認する。プロジェクトを以下の条件で作成する。
項目 | 内容 |
---|---|
Project name | TipsActivity2 |
Build Target | Android 1.6 |
Application name | TipsActivity2 |
Package name | sample.ta2 |
Create Activity | TipsActivity2 |
Min SDK Version | 4 |
動作はWVGAのエミュレータとVGAのエミュレータで確認する。デフォルトのリソースはWVGAに対応させ、notlongでVGAのエミュレータ用のリソースを作成する。Eclipseのプラグインは非常に優秀でここでリソースの名称を間違えた場合にエラーが出る。たとえばnotlongとするところをnolongと間違えるとリソース名がおかしいと以下のようにエラーになる。
この機能のおかげでリソースのディレクトリの名称を間違えることがない。これは非常に強力な機能である。
まずlayout/main.xmlを以下のようにする。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff0000" android:textSize="40sp" android:text="ワイドモニタ" /> </LinearLayout>
次に4:3用のlayout-notlong/main.xmlを以下のようにする。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff0000" android:textSize="40sp" android:text="4:3のモニタ" /> </LinearLayout>
最後にTipsActivity2.javaを以下のようにする。
package sample.ta2; import android.app.Activity; import android.os.Bundle; public class TipsActivity2 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
まずWVGAのモニタの実行結果は以下。
次に、VGAのモニタの実行結果。
また、組み合わせの例も確認する。VGAの縦の場合のレイアウトを作成する。layout-notlong-port/main.xmlを以下のようにする。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff0000" android:textSize="40sp" android:text="4:3のモニタ(縦)" /> </LinearLayout>
ファイルを追加後、再度実行し先ほどのVGAで実行し、Ctrl+F11キーで縦表示に切り替える。その実行結果は以下。