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

レイアウトを コードだけで記述 することで例えば、ボタンの位置や大きさを自由に「動的」に変えることができます。

Android Studio 2.3.3
Android 7.1.1

 


setContentView

 
AndroidのActivityで画面のUIレイアウトは多くは setContentView で設定しています。
defaultで作成したProjectではレイアウトとしてのファイル activity_main.xml を以下のようにコードで指定しています。
 

 
このactivity_main.xmlの設定は静的、staticなものでアプリ起動中に簡単に変更することはできません。レイアウトを動的、dynamicに変化させたい場合は
 

 
のようにLinearLyoutなどのレイアウトを設定できるAPIを使います。
 
レイアウトは他にもありますが、基本的な以下の2つの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
LinearLayout
RelativeLayout