【记录】对话框的学习

晚上依然效率低,对自己很不满 。今天早点睡,就写一点。  

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、对话框类(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>
			}
		});


针对不同ID,生成不同的Dialog:
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();
	}
解释如下:
(1) LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;通过这个类的.inflate方法将一个XML的布局变为View实例。
(2) builder.setView(textEntryView); ----将实例好的个性化View放到Dialog中,这个textEntryView和alert_dialog_text_entry.xml文件相关联。

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>

代码解释:
(1)android:textAppearance="?android:attr/textAppearanceMedium------设置TextView里面的字体。
(2)EditView是文本输入框。
(3)android:capitalize="none"-------规定输入的大小写。若为none,输入的首字母是小写的。
(4)android:password="true"--------说明这个是密码输入框。 效果图如下:

四、ProgressDialog

	private Dialog buildDialog4(Context context) {
		ProgressDialog dialog = new ProgressDialog(context);
		dialog.setTitle("正在下载歌曲");
		dialog.setMessage("请稍候……");
		return  dialog;
	}

ProgressDialog可以直接用构造函数构造。

效果图如下:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值