ボタンをクリックすると、ダイナミックに生成したレイアウトが画面に表示される。 |
レイアウトの生成処理
ここでは、createLayoutというレイアウト生成のメソッドを用意し、onClickメソッドからこれを呼び出しています。これはLinearLayoutインスタンスを返すメソッドになっており、返されたLinearLayoutインスタンスをそのままsetContentViewで表示設定しています。
このLinearLayoutというクラスが、文字通りLinearLayoutのレイアウトを示すものになります。これは、以下のような形でインスタンスを生成します。
new LinearLayout( [Context] );
引数には、android.contentパッケージのContextが指定されます。「Contextって何だ?」と思ったかもしれませんが、これはActivityのスーパークラスです。つまり、通常のActivity継承クラスであれば、そのままthisを指定すればいいわけですね。
作成したLinearLayoutには、コンポーネントを追加していきます。ここではTextViewをnewし、これを組み込んでいます。組み込みは「addView」というメソッドを利用します。これは組み込むコンポーネントのインスタンス(Viewクラスのサブクラス)と、この他にレイアウトに関する設定情報を示す「LayoutParams」というクラスを用意する必要があります。ここでは、
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
このようにしてLayoutParamsインスタンスを作成しています。LinearLayout.LayoutParams(LinearLayout用のLayoutParams)をnewし、引数にViewGroup.LayoutParamsクラスにあるFILL_PARENTとWRAP_CONTENTを指定していますね。これは、main.xmlのTextViewのところにあった、以下の属性と同じことを指定するものです。
android:layout_width="fill_parent"
android:layout_height="wrap_content"
これで、作成したTextViewが、組み込まれたLinearLayout内でどのように配置されるかを指定したわけです。後は、setTextで表示するテキストを設定すれば、コンポーネントの作成と組み込みは完了ですね。