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

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

Android Studio 3.0
Android 8.0

 



Button

 
レイアウトは他にもありますが、LinearLayoutのケースで基本的な設定とダイナミックにボタンの位置を変更したり、またRelativeLayoutのケースでも確認してみたいと思います。
 

 

 

setContentView

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

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

 
のようにLinearLyoutなどのレイアウトを設定できるAPIを使います。

 

LinearLayoutのケース

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

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

 
となりますが、レイアウトXMLファイルを使わないので、その他にButtonやTextViewのレイアウトも設定します。
 
クリックリスナーは変わりません、まとめるとこのようになります。
 
MainActivity.java

 
リソースファイルは必要です。
res\values\strings.xml

 

相変わらずレイアウトが…ですが以降で味付けしてみます。

 

ボタン位置を動的に変える

 
基本的なコードから、中央寄せ、テキストサイズの変更などを加えます。
 
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