[Android] ButtonをJavaコードだけで設定する

Android7 

レイアウトを activity_main.xml などのxmlファイルでの設定ではなく java コードだけで記述するにはどうするか。いわゆるダイナミックにUIを変えたいというケースに必要です。
ボタン等の位置や大きさを自由に「動的」に変えたいとか。

ボタンタップでボタンのレイアウトとサイズを変化させた例です


Android Studio 2.2.3
Android 7.1.1

 


setContentView

 
Androidのコードでレイアウトを決めているのはsetContentViewです。
defaultで作成したProjectではレイアウトとしてactivity_main.xmlを以下のコードで指定しています。

このactivity_main.xmlの設定は静的、staticなものでアプリ起動中に変更することはできません。動的、dynamicにするあるいはレイアウトファイルを使わない場合は

のようにLinearLyoutなどのインスタンスを設定します。

レイアウトは他にもありますが、最初にLayoutについて確認してみたいと思います。

 

LinearLayout

 
ButtonをタップするとTextViewの表示を変える 簡単な例 を レイアウトファイル xml で作成しました。これをコードで書くとこのようになります。Buttonのインスタンス生成は、

レイアウトファイルに記述していたLinieaLayout部分は

クリックリスナーは変わりません、まとめるとこのようになります。

MainActivity.java

 
基本的にはこのようになりますが、中央寄せ、テキストサイズの変更などを加えるとこのようになります。

MainActivity.java

 

Dynamicにボタンを変更:
これだけだとあまりありがたみが無いですが、画面サイズに応じて位置や大きさを変化させたりしたいときは。これで動的にボタンえを変更できます。
MainActivity.java

 

button2_1
button2_2

 
ボタンの横幅を250dp,縦幅を100dp
マージンを 左5dp,上50dp, 右50dp に変えてみました
dpについてはdp, px, dpi, sp アプリ画面の解像度単位を包括・統一的に扱うを参照してください

テキストの色を変えたり
テキストサイズを変えたりなどは
xmlと絡めて簡単にできますが
位置の調整はこのようにする必要があります

Buttonのタップを匿名クラスで取得していますが、他にもいくつも方法があります。
onClickListenerの色々な設定

 

RelativeLayout

 
LinearLayoutと基本的には同じですが、RelativeLayoutとしての位置指定が必要です。
+アルファで多少アレンジしてみました。
 
MainActivity.java

 

関連ページ:

References:
setContentView