对话框详解0

对话框是人机交互的重要组成部分,android中使用AlertDialog.Builder类来创建对话框,本文详解了各种对话框的创建方法:

ps:本文采用activity托管的方式来创建对话框,即使用onCreateDialog方法来创建。当调用Activity类的showDialog方法时,系统会调用onCreateDialog方法来返回一个dialog,即showDialog将参数传进onCreateDialog方法。如果使用一般的创建方法,则和程序方法里面的做法相同。

main.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="fill_parent">
	<Button android:id="@+id/btnDeleteFile" android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="显示确认对话框" />
	<Button android:id="@+id/btnSimpleList" android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="显示简单列表对话框" />
	<Button android:id="@+id/btnSingleChoiceList"
		android:layout_width="fill_parent" android:layout_height="wrap_content"
		android:text="显示单选列表对话框" />
	<Button android:id="@+id/btnMultiChoiceList"
		android:layout_width="fill_parent" android:layout_height="wrap_content"
		android:text="显示多选列表对话框" />
	<Button
	    android:id="@+id/customerDialog"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:text="显示自定义对话框" />

</LinearLayout>

自定义布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:"
            android:textSize="20dp" />

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密    码:"
            android:textSize="20dp" />

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:password="true" />
    </LinearLayout>

</LinearLayout>

主程序:

public class Main extends Activity implements OnClickListener {
	private final int DIALOG_TWO_BUTTON = 1;
	private final int DIALOG_SIMPLE_LIST = 2;
	private final int DIALOG_SINGLE_CHOICE_LIST = 3;
	private final int DIALOG_MULTI_CHOICE_LIST = 4;
	private final int DIALOG_CUSTOMER_DIALOG = 5;
	private ListView lv = null;
	private String[] provinces = new String[] { "辽宁省", "山东省", "河北省", "福建省",
			"广东省", "黑龙江省" };
	//setSingleChoiceItems的响应事件
	private ButtonOnClick buttonOnClick = new ButtonOnClick(1);

	public void onClick(View view) {
		switch (view.getId()) {
		case R.id.btnDeleteFile:
			showDialog(DIALOG_TWO_BUTTON);
			break;
		case R.id.btnSimpleList:
			showDialog(DIALOG_SIMPLE_LIST);
			break;
		case R.id.btnSingleChoiceList:
			showDialog(DIALOG_SINGLE_CHOICE_LIST);
			break;
		case R.id.btnMultiChoiceList:
			showDialog(DIALOG_MULTI_CHOICE_LIST);
			break;
		case R.id.customerDialog:
			showDialog(DIALOG_CUSTOMER_DIALOG);
			break;
		}
	}

	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case DIALOG_TWO_BUTTON:
			return new AlertDialog.Builder(this)
					.setIcon(R.drawable.question)
					.setTitle("是否删除文件")
					//三个button  setNeutralButton()
					.setPositiveButton("确定",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int whichButton) {
									new AlertDialog.Builder(Main.this)
											.setMessage("文件已经被删除.").create()
											.show();
								}
							})
					.setNegativeButton("取消",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int whichButton) {

									new AlertDialog.Builder(Main.this)
											.setMessage("您已经选择了取消按钮,该文件未被删除.")
											.create().show();
								}
							}).create();

		case DIALOG_SIMPLE_LIST:
			return new AlertDialog.Builder(this).setTitle("选择省份")
					.setItems(provinces, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							final AlertDialog ad = new AlertDialog.Builder(
									Main.this)
									.setMessage(
											"您已经选择了: " + which + ":"
													+ provinces[which]).show();
							android.os.Handler hander = new android.os.Handler();
							hander.postDelayed(new Runnable() {
								public void run() {
									ad.dismiss();

								}
							}, 5 * 1000);

						}
					}).create();
		case DIALOG_SINGLE_CHOICE_LIST:
			return new AlertDialog.Builder(this).setTitle("选择省份")
					.setSingleChoiceItems(provinces, 1, buttonOnClick)
					.setPositiveButton("确定", buttonOnClick)
					.setNegativeButton("取消", buttonOnClick).create();
		case DIALOG_MULTI_CHOICE_LIST:
			AlertDialog ad = new AlertDialog.Builder(this)
					.setIcon(R.drawable.image)
					.setTitle("选择省份")
					.setMultiChoiceItems(
							provinces,
							new boolean[] { false, true, false, true, false,
									false },
							new DialogInterface.OnMultiChoiceClickListener() {
								public void onClick(DialogInterface dialog,
										int whichButton, boolean isChecked) {

								}
							})
					.setPositiveButton("确定",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int whichButton) {
									int count = lv.getCount();
									String s = "您选择了:";
									for (int i = 0; i < provinces.length; i++) {

										if (lv.getCheckedItemPositions().get(i))
											s += i
													+ ":"
													+ lv.getAdapter()
															.getItem(i) + "  ";

									}
									if (lv.getCheckedItemPositions().size() > 0) {
										new AlertDialog.Builder(Main.this)
												.setMessage(s).show();
									} else {
										new AlertDialog.Builder(Main.this)
												.setMessage("您未选择任何省份").show();

									}

								}
							}).setNegativeButton("取消", null).create();
			lv = ad.getListView();
			return ad;

		case DIALOG_CUSTOMER_DIALOG:
			LinearLayout loginLayout = (LinearLayout) getLayoutInflater()
					.inflate(R.layout.login, null);
			new AlertDialog.Builder(this)
					.setIcon(R.drawable.image)
					.setTitle("用户登录")
					//通过setView方法设置自定义视图
					.setView(loginLayout)
					.setPositiveButton("登录",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int whichButton) {
									// 编写处理用户登录的代码
								}
							})
					.setNegativeButton("取消",
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int whichButton) {
									// 取消用户登录,退出程序

								}
							}).show();
			break;
		}

		return null;
	}

	private class ButtonOnClick implements DialogInterface.OnClickListener
	{
		private int index;

		public ButtonOnClick(int index)
		{
			this.index = index;
		}

		public void onClick(DialogInterface dialog, int whichButton)
		{
			if (whichButton >= 0)
			{
				index = whichButton;
			}
			else
			{
				if (whichButton == DialogInterface.BUTTON_POSITIVE)
				{
					new AlertDialog.Builder(Main.this).setMessage(
							"您已经选择了: " + index + ":" + provinces[index]).show();
				}
				else if (whichButton == DialogInterface.BUTTON_NEGATIVE)
				{
					new AlertDialog.Builder(Main.this).setMessage("您什么都未选择.")
							.show();
				}
			}
		}
	}
	//调用show方法之前调用
	@Override
	protected void onPrepareDialog(int id, Dialog dialog)
	{
		super.onPrepareDialog(id, dialog);
	}

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button btnDeleteFile = (Button) findViewById(R.id.btnDeleteFile);
		Button btnSimpleList = (Button) findViewById(R.id.btnSimpleList);
		Button btnSingleChoiceList = (Button) findViewById(R.id.btnSingleChoiceList);
		Button btnMultiChoiceList = (Button) findViewById(R.id.btnMultiChoiceList);
		Button customerDialog = (Button)findViewById(R.id.customerDialog);
		btnDeleteFile.setOnClickListener(this);
		btnSimpleList.setOnClickListener(this);
		btnSingleChoiceList.setOnClickListener(this);
		btnMultiChoiceList.setOnClickListener(this);
		customerDialog.setOnClickListener(this);
	}
}
时间: 2024-10-26 17:07:10

对话框详解0的相关文章

Android Dialog对话框详解_Android

废话不多说了,直接给大家贴代码了. 布局文件xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_paren

Android Dialog 对话框详解及示例代码_Android

Android Dialog 对话框 1.Dialog介绍 2.AlertDialog的基本使用 3.自定义对话框 Custom Dialog 一.Dialog介绍 Dialog也是Android中常用的用户界面元素,他同Menu一样也不是View的子类.让我们看一下它的继承关系: 这里要留意一下他的直接子类 AlertDialog,和间接子类 DatePickerDialog,ProgressDialog,TimePickerDialog,其中后三个我们在前面的章节已经讲过,今天我们把重点放在

Extjs Ext.MessageBox.confirm 确认对话框详解_extjs

Ext.MessageBox.confirm()详解 显示一个确认对话框,用来代替JavaScript标准的confirm()方法,具有两个按钮"是"和"否"如果为其提供一个回调函数,则该函数将在单击按钮后被调用(包括右上角的推出按钮),所单击按钮的id将被作为唯一的参数传递到回调函数中. 调用格式: confirm(String title,String msg,[function fn],[Object scope]) 参数说明: Ext.MessageBox.

javascript的对话框详解与参数_基础知识

对话框可以分为模式对话框和无模式对话框两种,两者区别是在对话框被关闭之前用户能否在同一应用程序的其他地方进行工作.举例说明:打开文件对话框便是典型的模式对话框,在你选择好要打开的文件按下确定后,或者取消打开文件操作后,才可以在同一应用程序进行其他操作.而常见的查找和替换对话框便是无模式对话框的典型,在该对话框打开的同时,我们还可以进行其他工作.模式对话框会始终保持焦点.除非关闭对话框,否则无法切换窗口. 无模式对话框不会始终保持焦点,但始终保持显示在最前端. 弹出网页窗口全攻略(html/hta

对话框详解2

本文演示了如何创建一个悬浮对话框,即将activity以对话框的方式显示. 只要指定Activity的主题是dialog即可: android:theme="@android:style/Theme.Dialog" 对于onTouchEvent方法:1.悬浮对话框(Activity) 单击屏幕上的任意地方都会触发       2.对话框  要想使用对话框的onTouchEvent方法.则必须继承AlertDialog类 本例先进入的是一个悬浮对话框(Activity),单击显示日期后弹

对话框详解1

本文演示了两种特殊对话框--ProcessDialog的使用方法: 主程序如下: public class Main extends Activity implements OnClickListener { private static final int MAX_PROGRESS = 100; private ProgressDialog progressDialog; private Handler progressHandler; private int progress; // 显示进

ExtJS Ext.MessageBox.alert()弹出对话框详解_extjs

复制代码 代码如下: Ext.onReady(function() { Ext.Msg.alert('提示', '逗号分隔参数列表'); //这种方式非常常见的 }); 效果图: 复制代码 代码如下: Ext.onReady(function() { //定义 JSON(配置对象) var config = { title:'提示', msg: 'JSON配置方式,简单吧' } Ext.Msg.show(config); }); 效果图: 上边我只是简单举例,好了看到了漂亮的界面了吧!接下来认识

Android AlertDialog对话框详解及实例

Android  AlertDialog 关系图如下: Android主要提供四种对话框: 1:AlertDialog:功能最丰富,实际应用最广的对话框. 2:ProgressDialog:进度条对话框 3:DatePickerDialog:日期选择器对话框 4:TimePickerDialog:时间选择器对话框 创建一个对话框的步骤: AlertDialog.Builder builder = new AlertDialog.Builder(this) // 1:设置对话框标题 .setTit

c++ builder中的 XMLDocument 类详解(0) - xml 语法提示

1.忽略空白2.注释: <!-- -->3.指令: <? ?>4.特殊字符: < > ' " &  替代: < > &apos; " &5.二进制数据: <![CDATA [...]]>6.区分大小写7.标记不能交叠8.单标记, 也就是空元素, 如: <node/>, 只用属性记录数据9.属性值在引号内10.xml 中的元素与属性的名字, 必须以字母或 _ 开头, 后面可以是字母.数字或 _