の可読性や再利用性を向上させることができます。
端的に言えば、includeタグで別レイアウトファイルを指定すると、
指定したレイアウトファイルの内容で置換されるようになります。
includeタグにはandroid:idを指定することができますので、それ自体にリソ
ースIDを指定することができます。
下記の例をみてます。
layout/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include android:id="@+id/includer" layout="@layout/include" /> </LinearLayout>
layout/include.xml
<?xml version="1.0" encoding="utf-8" ?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello"/> </FrameLayout>
ポイントはmain.xmlのinclude要素にリソースID(includer)が指定されていること。
上記の内容で、setContentView(main.xml)とした場合のレイアウト階層をみる
と、include先(include.xml)のFrameLayoutのリソースIDに"includer"が割り
当てられます。
では、include.xmlにあるFrameLayoutが既にリソースID割り当て済みだとした
らどちらが優先されるのでしょうか?下記の内容で検証してみます。
layout/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include android:id="@+id/includer" layout="@layout/include" /> </LinearLayout>
layout/include.xml
<?xml version="1.0" encoding="utf-8" ?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/includee" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello"/> </FrameLayout>
ポイントはmainのinclude要素にリソースID"includer"が、include.xmlの
FrameLayout要素にリソースID"includee"が指定されていること。
先の内容では、include要素のリソースIDがinclude先(include.xml)の
FrameLayoutのリソースIDに割り当てられましたが、今回はFrameLayoutに
はすでにリソースID"includee"が割り当てられています。
includerとincludeeどちらが優先されるのでしょうか?
結果は
includer > includee
となりました。
両方定義されている場合はincluderが優先。
includeeのみ定義されている場合はincludeeとなります。
以上です。