从零开始学android:Android中的基本控件(下) —— 对话框:Dialog

本章目标

掌握对话框的主要作用;
可以使用AlertDialog和AlertDialog.Builder进行对话框的建立;
可以通过LayoutInflater进行定制对话框的实现;
可以定义日期对话框、时间对话框、进度对话框的操作。


对话框

在图形界面之中,对话框也是人机交互的一种重要形式,程序可以通过对话框对用户进行一些信息的提示,而用户也可以通过对话框的和程序进行一些简单的交互操作。
在Android的开发之中,所有的对话框都是从android.app.Dialog类继承而来,此类继承结构如下:
java.lang.Object
       ↳    android.app.Dialog

Dialog类定义的常用方法 



警告框(AlertDialog)

警告框(AlertDialog)是在项目中出现的最简单的一种对话框,主要的目的是为用户显示一条警告信息,AlertDialog也是在对话框中使用最多的一个类,而且是Dialog的直接子类,此类继承结构如下:
java.lang.Object
       ↳    android.app.Dialog
            ↳    android.app.AlertDialog
如果要想实例化AlertDialog类往往都依靠其内部类:AlertDialog.Builder完成。

AlertDialog.Builder类的常用方法



范例:创建一个简单的对话框 


package com.richard.mydialogdemo;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyDialogDemo extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout);
		Dialog dialog = new AlertDialog.Builder(this)
		.setTitle("对话框") 				// 设置标题
		.setMessage("显示提示信息。") 		// 显示信息
		.setIcon(R.drawable.file_icon) 	// 设置显示的Icon
		.create(); 						// 创建Dialog
		dialog.show();
	}
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_dialog_demo, menu);
		return true;
	}
}




范例:定义复杂对话框

定义布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	
    <TextView 
        android:id="@+id/mytext"
        android:text="北京魔乐科技软件学院"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button 
        android:id="@+id/mybut"
        android:text="删除"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

编写Activity程序,显示对话框 

package com.richard.mydialogdemo;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyDialogDemo extends Activity {
	private Button mybut = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mybut.setOnClickListener(new OnClickListenerImpl());				//设置单击事件
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Dialog dialog = new AlertDialog.Builder(MyDialogDemo.this)
								.setIcon(R.drawable.file_icon)
								.setTitle("确定删除")
								.setMessage("您确定要删除该条信息吗?")
								.setPositiveButton("删除", 
								new DialogInterface.OnClickListener() {
									
									@Override
									public void onClick(DialogInterface dialog, int which) {
										// TODO Auto-generated method stub
										
									}
								}).setNeutralButton("查看详情", 
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												//单击事件
												
											}
										}).setNegativeButton("取消", 
												new DialogInterface.OnClickListener() {
													
													@Override
													public void onClick(DialogInterface dialog, int which) {
														// TODO Auto-generated method stub
														
													}}
												).create();
			dialog.show();
		}
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_dialog_demo, menu);
		return true;
	}
}

操作事件

在对话框里面增加按钮时每个按钮都设置了DialogInterface.OnClickListener事件监听接口操作对象,此接口主要负责对话框中按钮的事件处理操作,此接口定义如下:

public interface DialogInterface.OnClickListener {
	/**
	 * 对话框单击时触发操作
	 * @param dialog Dialog的父接口
	 * @param which 返回选中对话框选项的位置(position)
	 */
	public abstract void onClick (DialogInterface dialog, int which) ;
}

对话框事件处理接口




范例:程序退出提示


定义布局管理器

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	
    <ImageButton 
        android:id="@+id/but"
        android:src="@drawable/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

定义Activity程序,编写对话框

package com.richard.mydialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.KeyEvent;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event){
		if(keyCode == KeyEvent.KEYCODE_BACK){
			this.exitDialog();
		}
		return false;
	}
	
	private void exitDialog(){
		Dialog dialog = new AlertDialog.Builder(MainActivity.this)	//实例化对象
							.setIcon(R.drawable.icon)
							.setTitle("程序退出?")
							.setMessage("您确定要退出程序吗?")
							.setPositiveButton("确定",
									new DialogInterface.OnClickListener() {

										@Override
										public void onClick(
												DialogInterface dialog,
												int which) {
											MainActivity.this.finish();
										}
									}).setNegativeButton("取消",
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												
											}
										}
									).create();
		dialog.show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}


范例:对话框列表


在main.xml文件之中定义组件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<TextView 
	    android:id="@+id/mych"
	    android:text=""
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
	<Button 
	    android:id="@+id/mybut"
	    android:text="选择水果"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

定义Activity程序,操作对话框

package com.richard.mydialoglist;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyDialogListDemo extends Activity {
	private Button mybut = null;
	private TextView mych = null;
	private String fruitData[] = new String[]{"苹果","西瓜","水蜜桃"};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mych = (TextView) super.findViewById(R.id.mych);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			Dialog dialog = new AlertDialog.Builder(MyDialogListDemo.this)	//实例化对象
								.setIcon(R.drawable.icon)
								.setTitle("请选择你喜欢吃的水果?")
								.setNegativeButton("取消",
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												
											}
										}
										).setItems(fruitData,
												new DialogInterface.OnClickListener() {
													
													@Override
													public void onClick(DialogInterface dialog, int which) {
														MyDialogListDemo.this.mych
														.setText("您选择的水果是:" + fruitData[which]);
													}
												}
												).create();
			dialog.show();
		}
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_dialog_list_demo, menu);
		return true;
	}
}

范例:通过资源文件读取显示数据列表(效果同上)

定义资源文件 —— res/values/fruit_data.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="fruit_labels">
		<item>苹果</item>
		<item>西瓜</item>
		<item>水蜜桃</item>
	</string-array>
</resources>

修改Activity程序

package com.richard.mydialoglist;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyDialogListDemo extends Activity {
	private Button mybut = null;
	private TextView mych = null;
	private String fruitData[] = new String[]{"苹果","西瓜","水蜜桃"};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mych = (TextView) super.findViewById(R.id.mych);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			Dialog dialog = new AlertDialog.Builder(MyDialogListDemo.this)	//实例化对象
								.setIcon(R.drawable.icon)
								.setTitle("请选择你喜欢吃的水果?")
								.setNegativeButton("取消",
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												
											}
										}
										).setItems(R.array.fruit_labels, 
												new DialogInterface.OnClickListener() {
													
													@Override
													public void onClick(DialogInterface dialog, int which) {
														MyDialogListDemo.this.mych.setText("您选择的水果是:"
																	+ MyDialogListDemo.this.getResources().getStringArray(
																				R.array.fruit_labels)[which]);
													}
												}
												).create();
			dialog.show();
		}
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_dialog_list_demo, menu);
		return true;
	}
}


范例:对话框显示单选钮

设置单选项对话框,在main.xml文件中配置

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<TextView 
	    android:id="@+id/mych"
	    android:text=""
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
	<TextView 
	    android:id="@+id/mytext"
	    android:text=""
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
	<Button 
	    android:id="@+id/mybut"
	    android:text="选择水果"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

完成单选列表操作,定义Activity程序

package com.richard.mydialoglist;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyDialogListDemo extends Activity {
	private Button mybut = null;
	private TextView mych = null;
	private TextView mytext = null;
	private int chNum = 0;
	private String fruitData[] = new String[]{"苹果","西瓜","水蜜桃"};
	private String fruitDesc[] = new String[]{
			"苹果,植物类,多次花果,具有丰富营养成分。",
			"西瓜,植物类,多次花果,具有丰富营养成分。",
			"水蜜桃,植物类,多次花果,具有丰富营养成分。"			
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mych = (TextView) super.findViewById(R.id.mych);
		this.mytext = (TextView) super.findViewById(R.id.mytext);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View v) {
			Dialog dialog = new AlertDialog.Builder(MyDialogListDemo.this)
								.setIcon(R.drawable.icon)
								.setTitle("请选择你喜欢吃的水果")
								.setPositiveButton("确定", 
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												MyDialogListDemo.this.mych.setText("您喜欢的水果"
												+ fruitData[chNum]);
											}
										}
										).setNegativeButton("取消", 
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												
											}
										}
										).setSingleChoiceItems(MyDialogListDemo.this.fruitData, 0, 
										new DialogInterface.OnClickListener() {
											
											@Override
											public void onClick(DialogInterface dialog, int which) {
												MyDialogListDemo.this.mytext.setText(MyDialogListDemo.this.fruitDesc[which]);
												MyDialogListDemo.this.chNum = which;
											}
										}
										).create();
			dialog.show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_dialog_list_demo, menu);
		return true;
	}
}


范例:在对话框中显示复选框


使用复选框作为对话框内容,在main.xml文件中定义

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<TextView 
	    android:id="@+id/mych"
	    android:text=""
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
	<Button 
	    android:id="@+id/mybut"
	    android:text="选择水果"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

使用复选框作为对话框的内容,定义Activity程序

package com.richard.mydialoglist_checkbox;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyDialogListDemo extends Activity {
	private Button mybut = null;
	private TextView mych = null;
	private String[] fruitData = new String[]{"苹果","西瓜","水蜜桃"};
	private boolean chData[] = new boolean[]{true,true,false};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mych = (TextView) super.findViewById(R.id.mych);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			Dialog dialog = new AlertDialog.Builder(MyDialogListDemo.this)
							.setIcon(R.drawable.icon)
							.setTitle("请选择你喜欢吃的水果")
							.setPositiveButton("确定", 
									new DialogInterface.OnClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which) {
											//单击事件
										}
									}
									)
							.setNegativeButton("取消", 
									new DialogInterface.OnClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which) {
											//取消的单击事件
										}
									}
									)
							.setMultiChoiceItems(MyDialogListDemo.this.fruitData, MyDialogListDemo.this.chData, 
									new DialogInterface.OnMultiChoiceClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which, boolean isChecked) {
											for(int x = 0; x< fruitData.length;x++){
												if(x == which && isChecked){
													mych.append(fruitData[x] + "、");
												}											
											}
										}
									}
									
									)
			.create();
			dialog.show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_dialog_list_demo, menu);
		return true;
	}
}


定制对话框和LayoutInflater

如果现在希望在对话框中显示一些复杂的界面,例如:编写一个登录提示的对话框,这个时候就需要通过布局文件定义显示组件,之后再将这些布局显示包含到对话框之中,但是如果要想包含,则需要LayoutInflater类的支持


范例:定制登录对话框

定义布局管理器 —— main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/mybut"
        android:text="用户登录"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

定义对话框所需要的布局管理器 —— login.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TableRow>
        <TextView 
            android:text="用户名:"
            android:layout_marginLeft="20dip"
            android:textSize="8pt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <EditText 
            android:width="60pt"
            android:layout_height="wrap_content"
            />
    </TableRow>
	<TableRow >
	    <TextView 
	        android:text="密码:"
	        android:layout_marginLeft="20dip"
	        android:textSize="8pt"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        />
	    <EditText 
	        android:password="true"
	        android:width="60pt"
	        android:layout_height="wrap_content"
	        />
	</TableRow>
</TableLayout>

package com.richard.layoutinflater;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class LayoutInflaterDemo extends Activity {
	private Button mybut = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
	
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			LayoutInflater	factory = LayoutInflater.from(LayoutInflaterDemo.this);
			View myView  = factory.inflate(R.layout.login, null);		//将布局文件转换为View
			Dialog dialog = new AlertDialog.Builder(LayoutInflaterDemo.this)
							.setIcon(R.drawable.icon)
							.setTitle("用户登录")
							.setView(myView)
							.setPositiveButton("登录", 
									new DialogInterface.OnClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which) {
											
										}
									}
							).setNegativeButton("取消", 
									new DialogInterface.OnClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which) {
											
										}
									}
							)
			.create();
			dialog.show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.layout_inflater_demo, menu);
		return true;
	}
}


日期对话框:DatePickerDialog

DatePickerDialog类的常用方法



在布局管理器之中定义文本显示组件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<TextView 
	    android:id="@+id/txt"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
	<Button 
	    android:id="@+id/mybut"
	    android:text="设置日期"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

定义Activity程序,显示日期对话框

package com.richard.datepickdialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

public class DatepickerdialogDemo extends Activity {
	private Button mybut = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
		
		
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			Dialog dialog = new DatePickerDialog(DatepickerdialogDemo.this,		//当前上下文
							new DatePickerDialog.OnDateSetListener(){

								@Override
								public void onDateSet(DatePicker view,
										int year, int monthOfYear, int dayOfMonth) {
									TextView text = (TextView) findViewById(R.id.txt);
									text.setText("更新的日期为:"+year+"-"+monthOfYear+"-"+dayOfMonth);
								}
							}, 1981, 8 ,19);
			dialog.show();
		}
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.datepickerdialog_demo, menu);
		return true;
	}
}


时间对话框:TimePickerDialog

DatePickerDialog的功能是进行日期的显示,但是如果要想显示时间则需要依靠TimePickerDialog组件完成,此类定义结构如下:
java.lang.Object
       ↳ android.app.Dialog
            ↳ android.app.AlertDialog
                 ↳ android.app.TimePickerDialog

TimePickerDialog类的常用方法


在布局管理器之中定义一个文本显示框,显示更新后时间

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<TextView 
	    android:id="@+id/txt"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
	<Button 
	    android:id="@+id/mybut"
	    android:text="设置时间"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

定义Activity程序设置时间对话框

package com.richard.datepickdialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;

public class DatepickerdialogDemo extends Activity {
	private Button mybut = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
		
		
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			Dialog dialog = new TimePickerDialog(DatepickerdialogDemo.this, //当下上下文
							new TimePickerDialog.OnTimeSetListener() {
								
								@Override
								public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
									TextView text = (TextView) findViewById(R.id.txt);
									text.setText("时间为:"+hourOfDay+":"+minute);
								}
							}, 19, 20, true
							);
			dialog.show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.datepickerdialog_demo, menu);
		return true;
	}
}



进度处理对话框:ProgressDialog

在进行复杂操作的时候往往需要有一段操作时间,所以这个时候往往会为用户出现一个等待的对话框,而这个时候用户可以通过进度处理对话框显示进度的相关情况,此类定义结构如下所示:
java.lang.Object
       ↳ android.app.Dialog
           ↳ android.app.AlertDialog
                 ↳ android.app.ProgressDialog

ProgressDialog类的常用方法及常量


范例:进度对话框

定义布局管理器

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<Button 
	    android:id="@+id/mybut"
	    android:text="查找网络"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

启动对话框,直接通过show()方法启动进度对话框

package com.richard.progressdialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ProgressDialogDemo extends Activity {
	private Button mybut = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mybut.setOnClickListener(new OnClickListenerImpl2());
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			final ProgressDialog proDia = ProgressDialog.show(ProgressDialogDemo.this, "搜索网络", "请耐心等待...");
			new Thread(){
				public void run(){
						try{
							Thread.sleep(3000);
						}catch(Exception e){
						}finally{
							proDia.dismiss();
						}
				}
			}.start();
			proDia.show();
		}
	}
	
	private class OnClickListenerImpl2 implements OnClickListener{    //另一种实现方式

		@Override
		public void onClick(View v) {
			final ProgressDialog proDia = new ProgressDialog(ProgressDialogDemo.this);
			proDia.setTitle("搜索网络");
			proDia.setMessage("请耐心等待...");
			proDia.onStart();
			new Thread(){
				public void run(){
					try{
						Thread.sleep(3000);
					}catch(Exception e){
						
					}finally{
						proDia.dismiss();
					}
				}
			}.start();
			proDia.show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.progress_dialog_demo, menu);
		return true;
	}
}


范例:水平进度条对话框

定义布局管理器

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	<Button 
	    android:id="@+id/mybut"
	    android:text="查找网络"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>

启动对话框,直接通过show()方法启动进度对话框

package com.richard.progressdialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ProgressDialogDemo extends Activity {
	private Button mybut = null;
	private static final int MAX_PROGRESS = 100;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.mybut = (Button) super.findViewById(R.id.mybut);
		this.mybut.setOnClickListener(new OnClickListenerImpl());
	}
	
	private class OnClickListenerImpl implements OnClickListener{

		@SuppressWarnings("deprecation")
		@Override
		public void onClick(View arg0) {
			final ProgressDialog proDia = new ProgressDialog(ProgressDialogDemo.this);
			proDia.setTitle("搜索网络");
			proDia.setMessage("请耐心等待...");
			proDia.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);	//水平进度条
			proDia.setMax(MAX_PROGRESS);
			proDia.setProgress(30);
			proDia.setButton("后台处理", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					proDia.dismiss();
				}
			});
			proDia.setButton2("详细信息", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					
				}
			});
			
			proDia.onStart();
			new Thread(){
				public void run(){
					for(int x=0;x<MAX_PROGRESS;x++){
						try{
							Thread.sleep(500);
						}catch(InterruptedException e){
							e.printStackTrace();
						}
						//进程条每次增长1
						proDia.incrementProgressBy(1);
					}
					proDia.dismiss();
				}
				
			}.start();
			proDia.show();
			
		}
	}	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.progress_dialog_demo, menu);
		return true;
	}
}


内容多好啊呵呵,下面做下小结

对话框主要通过Activity程序生成,用于对用户的操作进行提示;
对话框可以分为:普通对话框、日期对话框、时间对话框、进度对话框;
对话框的显示组件也可以使用布局文件配置,但是需要通过LayoutInflater类完成转换。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值