晚上依然效率低,对自己很不满 。今天早点睡,就写一点。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、对话框类(Dialog)
在Activity中可以调用对话框的函数:
1、showDialog(int i)---显示标识为id的Dialog,该函数调用后,系统将反向调用Dialog的回调函数onCreateDialog(int id)。
2、dismissDialog(int id)---使标识为id的Dialog从界面中消失。
onCreateDialog(int id) onPrepareDialog(int id,Dialog dialog) 是2个回调函数,若Dialog没有生成先调用onCreateDialog,再调用onPrepareDialog;若已经生成,只是还没显示出来,直接回调onPrepareDialog()。(可以在显示之前对Dialog做一些小修改)
二、显示一个基本对话框
主界面如下:
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showDialog(DIALOG1);//<span style="font-size: 14px;">将Dialog1显示出来</span>
}
});
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG1:
return buildDialog1(ActivityMain.this);
case DIALOG2:
return buildDialog2(ActivityMain.this);
case DIALOG3:
return buildDialog3(ActivityMain.this);
case DIALOG4:
return buildDialog4(ActivityMain.this);
}
return null;
}
buildDialog1代码如下:
private Dialog buildDialog1(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.alert_dialog_icon);
builder.setTitle(R.string.alert_dialog_two_buttons_title);
builder.setMessage(R.string.alert_dialog_two_buttons_msg);
builder.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("点击了对话框上的确定按钮");
}
});
builder.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("点击了对话框上的取消按钮");
}
});
return builder.create();
}
解释如下:
1、AlertDialog.Builder builder = new AlertDialog.Builder(context)---生成一个AlertDialog.Builder。
AlertDialog是Dialog的一个直接子类,它有2个或三个Button,可以设置它的Title和Message。
不能直接通过AlertDialog的构造函数生成AlertDialog,要通过它的内部静态类AlertDialog.Builder来构造。
2、builder.setIcon();设置标题旁那个警示图标。
3、builder.setTitle();设置标题。
4、builder.setMessage();设置对话框里的消息。
5、builder.setPositiveButton();设置按钮的一些属性,第一个参数是按钮上显示出来的内容,第二个参数为DialogInterface.OnClickListener()监听器对象,这个监听器和Button监听器类似。
效果图如下:
三、个性化的对话框
private Dialog buildDialog3(Context context) {
LayoutInflater inflater = LayoutInflater.from(this);
final View textEntryView = inflater.inflate(
R.layout.alert_dialog_text_entry, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.alert_dialog_icon);
builder.setTitle(R.string.alert_dialog_text_entry);
builder.setView(textEntryView);
builder.setPositiveButton(...);
builder.setNegativeButton(...);
return builder.create();
}
解释如下:alert_dialog_text_entry.xml文件代码如下:
<pre name="code" class="html"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/username_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_marginLeft="20dip"
android:layout_marginRight="20dip" android:text="用户名"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText android:id="@+id/username_edit"
android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_marginLeft="20dip"
android:layout_marginRight="20dip" android:capitalize="none"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView android:id="@+id/password_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_marginLeft="20dip"
android:layout_marginRight="20dip" android:text="密码"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText android:id="@+id/password_edit"
android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_marginLeft="20dip"
android:layout_marginRight="20dip" android:capitalize="none"
android:password="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
代码解释:四、ProgressDialog
private Dialog buildDialog4(Context context) {
ProgressDialog dialog = new ProgressDialog(context);
dialog.setTitle("正在下载歌曲");
dialog.setMessage("请稍候……");
return dialog;
}
ProgressDialog可以直接用构造函数构造。
效果图如下: