本章目标
掌握对话框的主要作用;
可以使用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;
}
}
在进行复杂操作的时候往往需要有一段操作时间,所以这个时候往往会为用户出现一个等待的对话框,而这个时候用户可以通过进度处理对话框显示进度的相关情况,此类定义结构如下所示:
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类完成转换。