2011年03月28日

ダイアログの自作 EditTextをダイアログで!

ダイアログを自作します。

EditTextをダイアログに表示させて、入力後OKを押して、
Activity側で取得して、Activity側でToastで表示します。

dialogstart.png


dialogin13.png


dialog13.png


AlertDialog
ProgressDialog
DatePickerDialog
TimePickerDialog
などあるようですが、EditTextは作れない感じです。

参考サイト:ダイアログについて、日本語に翻訳
http://www.techdoctranslator.com/android/guide/ui/dialogs


というよりも、自作しないと真っ黒なデザインになるので僕は全部自作です。
自作すると、なんでもかんでも好きなようにできます。


むずかしくないです。
Dialogクラスを継承すれば簡単にできます。

DialogにもsetContentView()があるので、Activityと同じように設定すればOKです。

dismiss()でダイアログを閉じます。

注意する点は、ダイアログが閉じたとき処理をしたい場合、リスナーを設定することです、

ダイアログが閉じたら処理がActivityに帰ってくるわけではないです。
ウインドウズプログラムでいうモーダルダイアログ形式ではありません。


あと、バックボタンを押されたとき、キャンセルのリスナーも設定します。



Dialogのソース

//EditDialog.java

public class EditDialog extends Dialog {

DialogInterface.OnClickListener mOkListener = null;

public EditDialog(Context context,DialogInterface.OnClickListener Oklistener) {
super(context);

        //OK押されたときの処理のリスナー 自作です。
//ダイアログが閉じたときに処理したければ、必ず必要
mOkListener = Oklistener;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//タイトルバーは自分で作るから非表示にさせる setContentViewの前で設定
//タイトルバーも自分で作りたい人むけ
getWindow().requestFeature( Window.FEATURE_NO_TITLE );

//ダイアログのレイアウトをXMLから設定
setContentView( R.layout.dialog );

//OKボタンのリスナー
Button bt = (Button)findViewById(R.id.button1);
bt.setOnClickListener(mOnClickListener);
}


private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
public void onClick(View v) {

//OKおされたら登録されているDialogInterface.OnClickListenerを実行
mOkListener.onClick(EditDialog.this, 0);

//ダイアログを閉じる
dismiss();
}};

public EditText getEditText()
{
return (EditText)findViewById(R.id.editText1);
}
}






//Activity側
//main.java

public class main extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//クリックするとダイアログ表示
Button bt = (Button)findViewById(R.id.button1);
bt.setOnClickListener(mOnClickListener_Show);
}


private final View.OnClickListener mOnClickListener_Show = new View.OnClickListener() {
public void onClick(View v) {

//ダイアログ表示はかならずこれで行う! Activityにある関数
//内部でonCreateDialog -> onPrepareDialog が呼ばれる
showDialog(0);
}};


@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = super.onCreateDialog(id);

//showDialog(0)を呼ぶとき最初の1回だけ呼ばれる
dialog = new EditDialog(this,mOnClickListener_OkButton);
dialog.setOnCancelListener(mOnCancelListener);

return dialog;
}

@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);

//showDialog(0)を呼ぶとき毎回呼ばれる
//ダイアログの状態を変化させることができる テキストボックスを初期化
EditDialog editDialog = (EditDialog)dialog;
editDialog.getEditText().setText("");
}



//ダイアログのOKボタンを押したとき
private DialogInterface.OnClickListener mOnClickListener_OkButton = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

EditDialog editDialog = (EditDialog)dialog;
String getText = editDialog.getEditText().getText().toString();

Toast.makeText(main.this, "getText -> " + getText , Toast.LENGTH_LONG).show();
}};

//バックボタンを押したとき
private DialogInterface.OnCancelListener mOnCancelListener = new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {

//なにもしない
}};

}




posted by R at 16:07| Comment(91) | 日記