androidのレイアウトの中で、何かのボタンを押したときにテキストボックスや画像が挿入したいなと
思っていたらinflaterという概念を発見したのでメモがてら説明します。
inflaterは、あらかじめ空のviewを定義し別のxmlファイルで挿入したいコンポーネントを書いて
おくことで何かの処理をしたらそのコンポーネントがページに表示させるレイアウト方法で
javascriptで例えるとcreateelementみたいな役割を持つレイアウトのことです。
いくつでも追加できるので入力項目の多いテキストフォームとかでも使えそうですね。
気になるのは追加したことで起きる他コンポーネントのレイアウト崩れくらいですが、
relativeLayoutを上手く使えばそれも回避できそうなのでそちらは気にしなくていいかもです。
サンプルはこんな感じです。
メインのページです。↓
</pre> <i><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"</i> <i> xmlns:tools="http://schemas.android.com/tools"</i> <i> android:layout_width="match_parent"</i> <i> android:layout_height="match_parent"</i> <i> android:paddingBottom="@dimen/activity_vertical_margin"</i> <i> android:paddingLeft="@dimen/activity_horizontal_margin"</i> <i> android:paddingRight="@dimen/activity_horizontal_margin"</i> <i> android:paddingTop="@dimen/activity_vertical_margin"</i> <i> tools:context=".LayoutInflater" ></i> <i> </i><i> <Button</i> <i> android:id="@+id/btn_addview"</i> <i> android:layout_width="wrap_content"</i> <i> android:layout_height="wrap_content"</i> <i> android:layout_alignParentLeft="true"</i> <i> android:layout_alignParentTop="true"</i> <i> android:layout_marginLeft="5dp"</i> <i> android:text="追加" /></i> <i> </i><i> <Button</i> <i> android:id="@+id/btn_removeview"</i> <i> android:layout_width="wrap_content"</i> <i> android:layout_height="wrap_content"</i> <i> android:layout_marginLeft="19dp"</i> <i> android:layout_toRightOf="@+id/btn_addview"</i> <i> android:text="削除" /></i> <i> </i><i> <RelativeLayout</i> <i> android:id="@+id/rl_display"</i> <i> android:layout_width="match_parent"</i> <i> android:layout_height="wrap_content"</i> <i> android:layout_below="@+id/btn_addview"></i> <i> </RelativeLayout></i> <i> </i><i></RelativeLayout></i> <pre>
こちらがボタンを押したときに追加されるコンポーネントです。
</pre> <div><i><?xml version="1.0" encoding="utf-8"?></i></div> <div><i><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"</i></div> <div><i> android:id="@+id/ll_content"</i></div> <div><i> android:layout_width="match_parent"</i></div> <div><i> android:layout_height="match_parent"</i></div> <div><i> android:orientation="vertical" ></i></div> <div><i> </i></div> <div><i> <TextView</i></div> <div><i> android:id="@+id/tt_title"</i></div> <div><i> android:layout_width="wrap_content"</i></div> <div><i> android:layout_height="wrap_content"</i></div> <div><i> android:textSize="16sp"</i></div> <div><i> android:textStyle="bold"</i></div> <div><i> android:text="タイトルです" /></i></div> <div><i> </i></div> <div><i> <EditText</i></div> <div><i> android:id="@+id/et_name"</i></div> <div><i> android:layout_width="match_parent"</i></div> <div><i> android:layout_height="wrap_content"</i></div> <div><i> android:hint="Name"</i></div> <div><i> android:ems="10" ></i></div> <div><i> </i></div> <div><i> <requestFocus /></i></div> <div><i> </EditText></i></div> <div><i> </i></div> <div><i> <EditText</i></div> <div><i> android:id="@+id/et_address"</i></div> <div><i> android:layout_width="match_parent"</i></div> <div><i> android:layout_height="wrap_content"</i></div> <div><i> android:hint="メールアドレス"</i></div> <div><i> android:ems="10" /></i></div> <div><i> </i></div> <div><i> <Button</i></div> <div><i> android:id="@+id/btn_submit"</i></div> <div><i> android:layout_width="wrap_content"</i></div> <div><i> android:layout_height="wrap_content"</i></div> <div><i> android:text="Submit" /></i></div> <div><i> </i></div> <div><i></LinearLayout></i></div> <pre>
マニフェストへの定義も忘れないように
</pre> <div><i><intent-filter></i></div> <div><i> <action android:name="android.intent.action.MAIN" /></i></div> <div><i> </i></div> <div><i> <category android:name="android.intent.category.LAUNCHER" /></i></div> <div><i> </intent-filter></i></div> <pre>