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

asaba 著者:asaba

【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>
  • この記事いいね! (0)

著者について

asaba

asaba author

好きなもの:RPG、チョコミント 少しずつ頑張ります。