【androidjava】inflaterでコンポ―ネントを追加する

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>
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG