【Android】ビューを動的に追加する方法を実例付きで解説
本記事では、Androidアプリ開発において、既存のビュー(View)に対して新しいビューを動的に追加する方法を、サンプルコードと実行結果を交えながらわかりやすく解説します。レイアウトXMLにあらかじめ記述せず、JavaコードからTextViewなどを生成・配置したい場合に役立つテクニックです。
全体の流れ
ステップ1:新規プロジェクトの作成
まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な情報を入力してプロジェクトを作成してください。
ステップ2:レイアウトファイルの編集
次に、res/layout/activity_main.xml に以下のコードを記述します。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:id="@+id/parent" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:gravity="center" android:orientation="vertical"> </LinearLayout>
上記のコードでは、空のLinearLayoutを定義しています。子要素は一切持たないレイアウトであり、この中に後ほどJavaコードからTextViewを動的に追加していきます。ポイントは以下の通りです。
android:id="@+id/parent":コード側から参照できるようIDを付与android:gravity="center":子ビューを中央に配置android:orientation="vertical":子ビューを縦方向に並べる
MainActivity.java の実装
続いて、MainActivity.java に以下のコードを記述します。
package com.example.andy.myapplication;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int view = R.layout.activity_main;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
LinearLayout parentLayout = (LinearLayout)findViewById(R.id.parent);
TextView textView = new TextView(MainActivity.this);
textView.setText("Child Row");
parentLayout.addView(textView);
}
}このコードの処理内容を順に見ていきましょう。
findViewById(R.id.parent)で、レイアウトXMLに定義した親となるLinearLayoutを取得します。new TextView(MainActivity.this)により、TextViewのインスタンスをプログラム上で新規生成します。setText()メソッドで表示する文字列(ここでは「Child Row」)を設定します。parentLayout.addView(textView)を呼び出すことで、生成したTextViewが親レイアウトに動的に追加されます。
このように、レイアウトXMLに何も書かなくても、JavaコードだけでUI部品を画面に反映させることができます。
アプリの実行と確認
それでは、アプリを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続し、Android Studioでプロジェクト内のアクティビティファイルを開いたら、ツールバーの「Run」アイコンをクリックします。デバイス選択画面で自分の端末を選択すると、端末の画面に以下のように表示されます。

実行結果を見ると、空だったレイアウトに対して、コードから生成したTextViewが正しく表示されていることが確認できます。これがビューを動的に追加する基本的な方法です。
まとめ
ビューの動的追加は、リストの項目を状況に応じて変化させたい場合や、ユーザーの操作に応じてUIを組み替えたい場合など、さまざまなシーンで活用できる重要な手法です。まずは今回のようにTextViewを1つ追加するシンプルな例から試してみてください。応用として、LayoutInflaterを使ったカスタムビューの追加や、ループ処理による複数ビューの一括生成などにも挑戦してみると理解が深まります。
-
AndroidのカスタムListViewに検索機能を実装する方法【サンプルコード付き】
はじめに このチュートリアルでは、AndroidアプリのListView(リストビュー)に検索機能を実装する方法を解説します。EditTextに入力した文字列に応じて、表示中のリスト項目をリアルタイムで絞り込む仕組みを作成します。 手順1:新規プロジェクトを作成する Android Studioを開き、「File」→「New Project」を選択して、必要な項目をすべて入力し、新しいプロジェクトを作成します。 手順2:レイアウトファイル(activity_main.xml)を編集する res/layout/activity_main.xml に以下のコードを記述します。上部に検索ワードを入力
-
Androidで円形のImageViewに影と境界線を追加する方法【コード例付き】
はじめにこの記事では、AndroidアプリのImageViewに表示する画像を円形に切り取り、さらに白い境界線と影(外枠)を追加する方法を、実際のコード例とともに段階的に解説します。ポイントは、RoundedBitmapDrawableFactoryで生成できるRoundedBitmapDrawableを使って画像を円形化し、PaintとCanvasを使って境界線や影を描画するところです。手順1:新規プロジェクトを作成するAndroid Studioを開き、メニューから「File」→「New Project」を選択して、必要な項目を入力し新しいプロジェクトを作成します。今回は空のアクティビティ