[Android] レイアウト (5) レイアウトの組込み - include ================================================================================ 他のレイアウトの XML ファイルを、自身の中に組み込むことができる。 このためには、 <include layout="@layout/XMLファイル名" /> 要素を使う。 ・属性 layout レイアウトリソース。 必須。レイアウトリソースに対する参照。 android:id リソース ID。インクルードされたレイアウトのルート要素のビューで指定された ID はこれで上書きされる。 android:layout_height, android:layout_width ディメンションまたはキーワード。インクルードされたレイアウトのルート要素のビ ューで指定された高さ、幅はこれで上書きされる。 インクルードされたレイアウトのルート要素でサポートされていれば、 <include> には 他のレイアウト属性を含めることが可能で、それらはルート要素で定義されたものを上書 きする。 □ 参考 ソフトウェア技術ドキュメントを勝手に翻訳 Android 開発ガイド > フレームワークトピック > 7. アプリケーションリソース > 7.5 リソースタイプ > 7.5.4 レイアウトリソース http://www.techdoctranslator.com/android/guide/resources/available-resources/layout-resource ▲ レイアウト 3x3 のテーブルのレイアウトを定義する。このとき、1 行分を定義する row.xml、1 項目 分を定義する item.xml を用意し、include 要素で引っ張ってきている。 main.xml TableLayout 要素でテーブルを定義。3 つの row.xml を参照している row.xml TableRow 要素で行を定義。3 つの item.xml を参照している item.xml ToggleButton 要素 □ res/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" > <TableLayout android:id="@+id/tableLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dip" android:weightSum="1" > <include android:id="@+id/row0" layout="@layout/row" /> <include android:id="@+id/row1" layout="@layout/row" /> <include android:id="@+id/row2" layout="@layout/row" /> </TableLayout> </LinearLayout> --- 1 行分の定義 □ res/layout/row.xml --- <?xml version="1.0" encoding="utf-8"?> <TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <include android:id="@+id/button0" layout="@layout/item" /> <include android:id="@+id/button1" layout="@layout/item" /> <include android:id="@+id/button2" layout="@layout/item" /> </TableRow> --- 1 項目分の定義 □ res/layout/item.xml --- <?xml version="1.0" encoding="utf-8"?> <ToggleButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:textAppearance="?android:attr/textAppearanceLarge" /> --- ▲ アクティビティ ボタンがクリックされたら、その状態によって、ボタンの幅と高さを倍にするか半分にす る。 コードは LinearLayout01Activity.java と同じであるが、末端のウィジェットを区別す るのに、getId() メソッドを使って、リソース ID をログに出す部分が追加になっている。 □ IncludeLayout01Activity.java --- package jp.marunomaruno.android.includelayout; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.ToggleButton; import jp.marunomaruno.android.includelayout.R; public class IncludeLayout01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void onClick(View view) { ToggleButton button = (ToggleButton) view; if (button.isChecked()) { button.setWidth(button.getWidth() * 2); button.setHeight(button.getHeight() * 2); } else { button.setWidth(button.getWidth() / 2); button.setHeight(button.getHeight() / 2); } System.out.printf("parent id = %x, id = %x", ((View) view.getParent()) .getId(), view.getId()); // (1) System.out.println(); } } --- (1) クリックしたビューと、その親ビューのリソース ID を表示 オブジェクトの特定のために、自身のリソース ID と、親のビュー(include 要素につけ られた ID)のリソース ID をログに出力する。 R クラスの表現とあわせるために、16 進表記している。 System.out.printf("parent id = %x, id = %x", ((View) view.getParent()) .getId(), view.getId()); // (1) View クラスのメソッド --- int getId() リソース ID を取得する final ViewParent getParent() 親ビューを取得する --- □ ViewParent インターフェース 親ビューになる可能性のあるビューのインターフェース。 次のビューのクラスがこのインターフェースを実装している。 AbsListView AbsSpinner AbsoluteLayout AdapterView<T?extends?Adapter> AdapterViewAnimator AdapterViewFlipper AppWidgetHostView CalendarView DatePicker DialerFilter ExpandableListView FragmentBreadCrumbs FrameLayout Gallery GestureOverlayView GridLayout GridView HorizontalScrollView ImageSwitcher LinearLayout ListView MediaController NumberPicker RadioGroup RelativeLayout ScrollView SearchView SlidingDrawer Spinner StackView TabHost TabWidget TableLayout TableRow TextSwitcher TimePicker TwoLineListItem ViewAnimator ViewFlipper ViewGroup ViewSwitcher WebView ZoomControls ViewParent インターフェースには、getId() メソッドがないので、これを使ってリソー ス ID を取得するためには、View にキャストして使う必要がある。 以上