本章目标
掌握对话框的主要作用;
可以使用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>
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>
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>
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>
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>
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>
<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类的常用方法
在布局管理器之中定义文本显示组件
<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; } }
DatePickerDialog的功能是进行日期的显示,但是如果要想显示时间则需要依靠TimePickerDialog组件完成,此类定义结构如下:
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
↳ android.app.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>
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>
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类完成转换。