先看过效果图:
第一步:建立res/values/string.xml
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">普通对话框</string> <string name="button">显示普通对话框</string> <string name="title">普通对话框</string> <string name="ok">确定</string> <string name="message">这是一个普通对话框。</string></resources>
第二步:建立res/layout/common_dialog_layout.xml 用来创建输入框和“显示普通对话框”按钮
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/editText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/message"/> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/button" /></LinearLayout>第三步: 分析:
关于src/com/mycommondialog/activity/CommonDialogActivity.java
1.首先对“显示普通对话框”按钮进行事件监听,即当点击这个按钮后显示对话框
View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View view) {showDialog(COMMON_DIALOG);}};button.setOnClickListener(listener);//对button事件监听
这里showDialog(int)用来显示对话框的,是系统自带的方法,当点击button产生时间后,调用该方法,首先该方法会判断Activity是否保存了对话框对象
(1)如果未保存则调用onCreateDialog(int),然后再调用onPrepareDialog(int, Dialog)
(2)如果保存了对话框对象,则直接调用onPrepareDialog(int, Dialog),不会再去create,所以有时候当你再输入框里无论如何输入什么内容,对话框的内容都是第一次产生的。
2. Activity 未保存对话框对象,则会创建对话框,即调用onCreateDialog(int)
protected Dialog onCreateDialog(int id) {EditText editText = (EditText) findViewById(R.id.editText);switch(id) { case COMMON_DIALOG: Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.dialog); builder.setTitle(R.string.button); builder.setMessage(editText.getText()); DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {removeDialog(COMMON_DIALOG);}};builder.setPositiveButton(R.string.ok, listener);dialog = builder.create(); break;}return dialog;}
需要new AlertDialog.Builder(this)用来存放Dialog的内容(如图标,标题和信息),this是针对此Activity的。
setPositiveButton表示中间的那个button按钮(一般情况下button有三个按钮,此处只显示中间的那个按钮)
removeDialog(int)是用来清除Activity保存下来的Dialog对象,如果不加removeDialog将会导致无论在对话框里输入什么内容,
弹出来的对话框始终都是第一次保留下来的,这里所以要加上它
3. 关于onPrepareDialog(int, Dialog), 每次点击“显示普通对话框”按钮都会去调用此方法。
@Override protected void onPrepareDialog(int id, Dialog dialog) { dialog.show(); }
dialog.show()其实意义不大,加与不加系统都会调用show的,而且只显示一个对话