サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > カスタムダイアログで値を入力するサンプル#tryCustomDialog00
Google Play AAKAKAxSOFTへ

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

実行ファイル(APK)やサンプル(zip)をダウンロードする
tryCustomDialog00の実行イメージ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;
	}
	
}
サンプルプロジェクトをダウンロード APKファイルをダウンロード

, , , ,

GALAXY NEXUS(SC-04D)の壁紙のサイズ 画像をスライドするサンプル#trySurfaceView01

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

  • 山崎 より:


    サンプルで練習してみます。

  • 山崎 より:


    こんにちは、山崎といいます。
    お世話になります。練習しようと思いましたが、zipファイルがダウンロードできませんでした。サイトにも、javaコードは載っておりますが、xmlはどこで見たらよいのでしょうか?
    お忙しいところ申し訳ございません。
    また、来ま~す。^^

    • aa より:


      コメントありがとうございます。
      apkファイル(アプリ本体)、zipファイル(プロジェクトファイル)のダウンロードはコメント欄の上の「APK DOWNLOAD」又は「SAMPLE DOWNLOAD」バナーをクリックすることで出来ます。
      スマートフォンからダウンロードする場合はコメント欄下の「モバイルテーマ」を「オフ」にすることでダウンロードバナーが表示されます。
      わかりにくくて申し訳ありませんが、お試しください。
      これからも「サンプルプログラム工場」をよろしくお願いします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>