GUIでXMLを更新してAndroidのレイアウトを組むのではなく完全手動でやってみた
純度100%のサーバ屋が手慰みにAndroidStudioを少しいじってみて、「これGUIでXML更新してレイアウト組むより手動で組んだ方が楽じゃね?」って思って試しにやってみたコードのメモ。
多分、手でAndroidなJavaのコード書いてる人にとっては常識なんだろうと思うけど、習熟段階でのメモなので、まぁ許してください。
入力フィールドとボタンがあって、ボタンを押したら「入力した値」をダイアログ上に表示し、ダイアログ上のOKボタンを押すと入力フィールドをクリアして戻る。というだけの簡単なアプリケーションを、レイアウトのXMLやRオブジェクトを使わず書いてみた。
package com.example.xxxxxxxx.myapplication2; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends AppCompatActivity { /** タイトルのラベル */ protected TextView textView = null; /** テキスト入力ボックス */ protected EditText editText = null; /** 実行ボタン */ protected Button button = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); createContext(); } private void createContext() { // 多分AWTのContentPaneみたいな。 final MainActivity activity = this; // 一番外側に FrameLayout を作る。 FrameLayout frameLayout = new FrameLayout(this); this.setContentView(frameLayout); // FrameLayoutの要素として、縦方向のLinearLayout を作る。 LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); frameLayout.addView(linearLayout); // TextView(JLabelみたいなの)を作ってLinearLayoutに食わせる textView = new TextView(this); textView.setText("Comment:"); textView.setTextSize(36.0f); linearLayout.addView(textView); // EditText(JTextFieldみたいなの)を作ってLinearLayoutに食わせる editText = new EditText(this); editText.setTextSize(24.0f); linearLayout.addView(editText); // Button(JButtonみたいなの)を作ってLinearLayoutに食わせる button = new Button(this); button.setText("submit"); button.setTextSize(32.0f); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { activity.button_onClick(view); } }); linearLayout.addView(button); } public void button_onClick(View view) { AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("Result"); dialog.setMessage(editText.getText().toString()); dialog.setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { editText.setText(""); } }); dialog.show(); } }
FrameLayout要らなかったかも。
根っこがサーバ屋でGUIもSwingやSWTで少し書く程度のクライアント素人なので、ツッコミどころ多数な気配はしますが、見逃してください。
やてみると、この方が楽だし自分にとっては理解しやすいんだけど、「すでにできる事」をやっているだけで勉強にはならないかなぁ。
あと、「自力でできるからこれでいーや」ってやっちゃうのは良くないっすね。
そういう癖がついちゃうと 、Erlangの癖が全く抜けていないElixirのコード書く人とか、C++なのにクラスを構造体としてしか使っていないロートルC技術者みたいな事になりそうなので、GUIのツールとXMLとRオブジェクトでも表現できる場合は、できるだけGUIのツールとXMLとRオブジェクトを使うよう心がけておこうと思いますた。