
カスタムダイアログで値を入力するサンプル#tryCustomDialog00


テキストボックスに入力を限定させたいときに、これを呼び出して入力を制限すると便利。
例えば数値を入力させたいけどソフトウェアキーボードから入力させるのは相手にとってめんどうだろうなぁとか思ったときにこれで簡単な入力をしてもらう。
AlertDialogではなくてDialogを拡張して使う。
●大事なところ
EditTextをEditable=falseにしないとソフトウェアキーボードが出る
Dialogからのコールバック用にインターフェイスを作る
●検索した
android ダイアログボックス レイアウト
android edittext クリックイベント
android onCreateDialog
Android Dialog 戻り値
●開発環境
Eclipse IDE バージョン: 3.7 Indigo Service Release 2
ターゲットプラットフォーム: 2.1
API レベル: 7
package trial.sample.trycustomdialog00; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.text.style.BulletSpan; import android.view.*; public class TryCustomDialog00Activity extends Activity implements View.OnClickListener, DialogCallback { private EditText mEditText; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // エディットテキストを取り出す this.mEditText = (EditText)this.findViewById(R.id.editText1); this.mEditText.setOnClickListener(this); } // //////////////////////////////////////////////////////////// // EditTextのクリック(タップを検知) public void onClick(View arg0) { // ダイアログを表示する CustomDialog dlg = new CustomDialog(this, this, R.id.editText1); dlg.show(); } // //////////////////////////////////////////////////////////// // ダイアログがOKボタンで閉じられた public void onDialogOK(int id, String value) { this.mEditText.setText(value); } } // //////////////////////////////////////////////////////////// // ダイアログの終了時に呼び出されるコールバック interface DialogCallback { public void onDialogOK(int id, String value); } // ////////////////////////////////////////////////////////////・ // 拡張したダイアログ class CustomDialog extends Dialog implements android.view.View.OnClickListener { private DialogCallback mCallback; // コールバック先 private int mID; // 識別用ID private String mValue; // 内部の値 // //////////////////////////////////////////////////////////// // ゲッター public String getValue() { return this.mValue; } // ////////////////////////////////////////////////////////////・ // コンストラクタ一式 public CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); this.setContentView(R.layout.custom_dialog); this.initDialog(); this.initControll(); } public CustomDialog(Context context, int theme) { super(context, theme); this.setContentView(R.layout.custom_dialog); this.initDialog(); this.initControll(); } public CustomDialog(Context context) { super(context); this.setContentView(R.layout.custom_dialog); this.initDialog(); this.initControll(); } // //////////////////////////////////////////////////////////// // IDとコールバック先の指定ができるコンストラクタ public CustomDialog(Context context, DialogCallback callback, int id) { super(context); // コールバック先を設定 this.mCallback = callback; this.mID = id; this.setContentView(R.layout.custom_dialog); this.initDialog(); this.initControll(); } // ダイアログの初期化 private void initDialog() { this.setTitle("数値が入力できます。"); } // コントローラーの初期化 private void initControll() { // 押されたことを検知するためにリスナーをセットする this.setButtonClickListner(R.id.button1); this.setButtonClickListner(R.id.button2); this.setButtonClickListner(R.id.button3); this.setButtonClickListner(R.id.button4); this.setButtonClickListner(R.id.button5); this.setButtonClickListner(R.id.button6); this.setButtonClickListner(R.id.button7); this.setButtonClickListner(R.id.button8); this.setButtonClickListner(R.id.button9); this.setButtonClickListner(R.id.buttonOK); this.setButtonClickListner(R.id.buttonCancel); } // //////////////////////////////////////////////////////////// // リスナーをボタンにセットする private void setButtonClickListner(int id) { final Button button = (Button)this.findViewById(id); button.setOnClickListener(this); } // //////////////////////////////////////////////////////////// // クリックされたときに呼び出される。 public void onClick(View v) { final EditText editText = (EditText)this.findViewById(R.id.editText1); String addText = ""; switch (v.getId()) { case R.id.button1: addText = "1"; break; case R.id.button2: addText = "2"; break; case R.id.button3: addText = "3"; break; case R.id.button4: addText = "4"; break; case R.id.button5: addText = "5"; break; case R.id.button6: addText = "6"; break; case R.id.button7: addText = "7"; break; case R.id.button8: addText = "8"; break; case R.id.button9: addText = "9"; break; // OKボタンが押されたときだけコールバックを呼び出し case R.id.buttonOK: this.mCallback.onDialogOK(this.mID, this.mValue); this.dismiss(); // これよぶとダイアログが閉じられる break; case R.id.buttonCancel: this.dismiss(); break; } // 値をダイアログ内のEditTextに設定する String newValue = editText.getText() + addText; editText.setText(newValue); // 内部変数の更新 this.mValue = newValue; } }
GALAXY NEXUS(SC-04D)の壁紙のサイズ 画像をスライドするサンプル#trySurfaceView01
サンプルで練習してみます。
コメントありがとうございます。
これからもよろしくお願いします。
こんにちは、山崎といいます。
お世話になります。練習しようと思いましたが、zipファイルがダウンロードできませんでした。サイトにも、javaコードは載っておりますが、xmlはどこで見たらよいのでしょうか?
お忙しいところ申し訳ございません。
また、来ま~す。^^
コメントありがとうございます。
apkファイル(アプリ本体)、zipファイル(プロジェクトファイル)のダウンロードはコメント欄の上の「APK DOWNLOAD」又は「SAMPLE DOWNLOAD」バナーをクリックすることで出来ます。
スマートフォンからダウンロードする場合はコメント欄下の「モバイルテーマ」を「オフ」にすることでダウンロードバナーが表示されます。
わかりにくくて申し訳ありませんが、お試しください。
これからも「サンプルプログラム工場」をよろしくお願いします。