android 创建Dialog?? android使用ShowDialog来显示一个Dialog,当第一次调用ShowDialog时,会调用Activity
android 创建Dialog
?? android使用ShowDialog来显示一个Dialog,当第一次调用ShowDialog时,会调用Activity的onCreateDialog方法,我们只需重写该方法,在改方法中创建一个Dialog.
而onPrepareDialog(int, Dialog)在Dialog显示时每次都会被调用。因此如果要动态修改dialog的信息,可以在改方法中实现.
下面给出使用实例:
showDialog(v.getId()); // 调用showDialog之后会回调onCreateDialog
@Overrideprotected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubswitch (id) {case R.id.btnTwobtn:return CreateDialog();case R.id.btnthreebtn:return CreateDialog3();case R.id.btnInput:return CreateDialogLogin();case R.id.btnwait:// 启动线程来关闭等待框new Thread() {@Overridepublic void run() {int i = 0;while (i < 10) {try {Thread.sleep(1000);}catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}i++;}dismissDialog(R.id.btnwait);}}.start();return CreateProcessDialog();case R.id.btnTimePicker:return CreateTimePickerDialog();default:return CreateDialog();}}// 第一个按钮private Dialog CreateDialog() {AlertDialog.Builder builder = new Builder(this);builder.setTitle("dialog test");builder.setMessage("点击按钮测试一下吧,看看title的变化");builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click ok");}});builder.setNegativeButton("cancel",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click cancel");}});return builder.create();}// 第2个按钮private Dialog CreateDialog3() {AlertDialog.Builder builder = new Builder(this);builder.setTitle("dialog test");builder.setMessage("点击按钮测试一下吧,看看3个按钮对title的变化");builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click ok");}});builder.setNegativeButton("cancel",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click cancel");}});builder.setNeutralButton("详细", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click detail");}});return builder.create();}// 第3个按钮 弹出输入框private Dialog CreateDialogLogin() {AlertDialog.Builder builder = new Builder(this);// 加载layout文件LayoutInflater inflater = LayoutInflater.from(this);View view = inflater.inflate(R.layout.logindialog, null);builder.setView(view);builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click ok");}});builder.setNegativeButton("cancel",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click cancel");}});builder.setNeutralButton("详细", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("click detail");}});return builder.create();}// 第4个按钮 等待框private Dialog CreateProcessDialog() {ProgressDialog dialog = new ProgressDialog(this);dialog.setMessage("正在运行,请等待...");return dialog;}// 第5个按钮 时间选择框private Dialog CreateTimePickerDialog() {TimePickerDialog dialog = new TimePickerDialog(this, 0,mTimeSetListener, 0, 0, false);return dialog;}private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {// TODO Auto-generated method stubint hour = hourOfDay;int minute1 = minute;Toast.makeText(getBaseContext(),"You have selected : " + hour + ":" + minute1,Toast.LENGTH_SHORT).show();}};运行结果如下:
?

?
?
?
?
如果我们想把一个Activity显示为一个Dialog形式,可以在androidManifest.xml中的activity的属性设为android:theme="@android:style/Theme.Dialog,伪装为dialog
<activity android:name="DialogActivity" android:theme="@android:style/Theme.Dialog"></activity>
?
?
