うさがにっき

読書感想文とプログラムのこと書いてきます

LayoutInfalter#inflateメソッドを考える

概要

LayoutInfalter#inflateメソッドの内容を把握する
このメソッドを使うことによりどのようなviewが取得できるか考える

まとめ

二種類の呼び方がある

http://developer.android.com/reference/android/view/LayoutInflater.html#inflate(int resource, android.view.ViewGroup root)

http://developer.android.com/reference/android/view/LayoutInflater.html#inflate(int resource, android.view.ViewGroup root, boolean)


一つ目のメソッドは
inflate(resource, root, root != null)
的に、rootがnullかどうかで、2つ目のメソッドを中で呼んでいる

resourceで指定されたレイアウトファイルをrootの配下に配置できるように最適化してくれる(実際に配置はしない!)
booleanの値によって、このメソッドの返却値が変わる

true:resourceで指定されたview
false:root

このメソッドの使い方を考えていくにあたり、以下のレイアウトファイルを用意しておく。

layout/main.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <LinearLayout
        android:id="@+id/layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center" >
    </LinearLayout>

    <TextView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="@string/hello" />  
  
</LinearLayout>  

layout/inflate.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="40sp"
    android:text="INFLATE TEXT" /> 

単にinlate.xmlをを取得して利用したい場合

setContentView(R.layout.main);
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.inflate, null);

xmlリソースファイルをviewに追加して、layout側のviewを取得したい場合

setContentView(R.layout.main);
ViewGroup infrateView = (ViewGroup)findViewById(R.id.layout1);

LayoutInflater inflater = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.inflate, infrateView);

xmlリソースファイルをviewに追加して、root側のviewを取得したい場合

setContentView(R.layout.main);
ViewGroup infrateView = (ViewGroup)findViewById(R.id.layout1);

LayoutInflater inflater = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.inflate, infrateView, true);