カスタムダイアログ

Dialogクラスを継承し、layout.xmlを利用する

AlertDialogもいろいろ便利だけど、いっそ全部自前でやってみよう
って、ことで、やってみた。

「ダイアログボタン」押下で
「自作ダイアログ」を表示。

デザインのセンスはともかくとして、
ちゃんと表示された。

一方ダイアログでは、
EditText から取得した文字列を
MainActivity のTextViewに
setTexte()する。

結果、MainActivity の
TextView の文字列が
"MainActivity onCreate()" から
"ダイアログ"に変わった。

MainActivityでは、MyDialogを new して show() するだけ。

 package com.papiroidsensei.testdialog02;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
	public static TextView textView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView = (TextView)findViewById(R.id.textView1);
        textView.setText("MainActivity onCreate()");
    }
    
    /**
     * ダイアログボタンのonClick
     */
    public void onDialogButton(View view) {

    	MyDialog dialog = new MyDialog(this);
    	dialog.show();
    	
    }
    
}
         

extends Dialog すると、使い慣れたActivityとほぼ同じ感覚。
ただ、Androidの低いバージョンだと、xmlからonClickは呼び出せない。
今回は、api level 8 (Android2.2)

package com.papiroidsensei.testdialog02;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.EditText;

public class MyDialog extends Dialog{

	public MyDialog(Context context) {
		super(context);
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// タイトルなし
		// (これしないとグレーのタイトルが付く)
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		// layout.xml を利用する
		setContentView(R.layout.dialog);
		// 画面の大きさに合わせる
		// (これしないと場合によっては極小表示になる)
		LayoutParams lp = getWindow().getAttributes();
		lp.width = LayoutParams.FILL_PARENT;
		getWindow().setAttributes(lp);
		// 「OK」ボタン
		findViewById(R.id.buttonOK).setOnClickListener(
        		new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				EditText editText = 
					(EditText)findViewById(R.id.editText1);
				String text = 
					editText.getText().toString();
				MainActivity.textView.setText(text);
				dismiss();
			}

		});
		// 「Cancel」ボタン
		findViewById(R.id.buttonCancel).setOnClickListener(
			new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				cancel();
			}

		});
	}
}
         
ページのトップへ戻る