レイアウトの旅
レイアウトをどこで設定して、どこで読み取って、どこでインスタンス化しているのかの話。
Inflate
インフレ・デフレという言葉が示すように、Inflateとはなにかをでっかくすることだ。ジンバブエな。
AndroidでInflate
といえば、レイアウトデータをレイアウトインスタンスにふくらませることだ。
レイアウトデータ
レイアウトデータはxmlだ。
xmlはHTMLで触れたことある?あるな?よっしゃ、
<LinearLayout
android:layout_width="wrap_content"
... >
<TextView
android:text="Hello Big Gorilla!"
... />
</<LinearLayout>
こんなかんじ。それを
GorillaProject/res/layout/my_cool_layout.xml
のような場所にいい感じの名前で格納する。
(ファイル名として使える文字に厳しい制限があるゾ)
レイアウトインスタンス
View root = inflater.inflate(R.layout.my_cool_layout);
inflater
ってなに?というキミの当然浮かぶであろう疑問は無視するとして、これによってroot
には先のレイアウトデータで定義したなかの「最も親のView」 = LinearLayout
のインスタンスが格納される。
そう、LinearLayout
のインスタンスだ。だから、
LinearLayout layout = (LinearLayout) root;
ができる。
inflate
では、xmlファイルという指示書に従って、Viewのインスタンスをnew
していくというわけだ。
Inflateなんてないじゃん
あるActivity
では、こんなふうに書かれている。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_cool_layout);
}
こういうときはsetContentView
のなかでInflate処理しているんだよ。大丈夫。
Inflateを内部的に呼び出している関数はたくさんあるよ。