Androidでコードからviewを追加する


何の記事?

Activityの表示内容を表示するたびに書き換えたい。
そんなときにkotlin上でviewを生成して追加する方法を紹介します。
やり方自体はjavaでも同様にできるはずです。

具体的な方法

ここでは、LinearLayoutにviewを追加していく例で説明します。
まずは外側のLinearLayoutを用意します。

sample_activity.xml
        <LinearLayout
            android:id="@+id/sampleLinear"
            android:layout_width="wrap_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >

        </LinearLayout>

このLinearLayoutの中にviewを追加していきます。
idはsampleLinearです。

まずはsampleLinearのインスタンスを取得します。
ここでは、EditTextを追加してみようと思います。

SampleActivity.kt
    val wrapContent = ViewGroup.LayoutParams.WRAP_CONTENT

    val linearLayout = view.findViewById<LinearLayout>(R.id.sampleLinear)
    val editText = EditText(applicationContext)

    linearLayout.addView(edit, LinearLayout.LayoutParams(wrapContent,wrapContent))

これで、以下と同じものが追加できたことになります。

<EditText
    android:width="wrap_content"
    android:height="wrap_content" />

viewに他のパラメータを設定したいときは、取得したviewのインスタンスにそれらを追加することができます。
以下では、複数行入力を可能にするEditTextのパラメータを設定しています。

SampleActivity.kt
    val editText = EditText(applicationContext)
    editText.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE)

Buttonを実装し、onClickListener内でこれを実装すると、
ボタンを押すたびにviewが追加される画面を作ることができます。

SampleActivity.kt
    val addButton = Button(mContext)
    addButton.setOnClickListener {
        val editText = EditText(applicationContext)

        linearLayout.addView(editText, LinearLayout.LayoutParams(MP,WC))
    }