Android应用主要有4种类型对话框,分别为AlertDialog、ProgressDialog、DataPickerDialog、TimePickerDialog,其中后三种都是继承于AlertDialog。简要介绍如下: AlertDialog:功能最丰富、实用最广的对话框; ProgressDialog:进度条对话框; DatePickerDialog:日期选择对话框,是对DatePicker的包装; TiemPickerDialog:时间选择对话框,是对TimePicker的包装。 转载标明博客:http://blog.csdn.net/u012637501 AlertDialog使用详解 使用AlertDialog,可以创建各种功能和风格的对话框。开发的主要步骤如下: (1)使用创建AlertDialog.Builder对象,其中Builder为AlertDialog内部静态类,提供对话框的具体实现方法; (2)调用AlertDialog.Builder的setTitle()或setCustomTitle()方法设置标题、 setIcon()方法设置标题 ; (3)调用AlertDialog.Builder的setCancelable()设置触屏不取消、setMessage()设置对话框内容; (4)调用AlertDialog.Builder的setPositiveButton()、setNegativeButton()或setNeutralButton()方法添加多个按钮。 (5)调用AlerDialog.Buidler的create()方法创建AlertDailog对象,再调用AlertDialog对象的show()方法将对话框显示出来。 1.创建显示提示消息的对话框 该类型对话框可以只是显示对话框消息,也可以为按钮注册监听器实现相应的功能。 (1)对话框样式
(2)代码实现
  1. AlertDialog.Builderbuilder=newAlertDialog.Builder(context);
  2. builder.setTitle("网络设置提示")
  3. .setIcon(R.drawable.dialog);
  4. .setMessage("网络异常,设置网络?")
  5. .setPositiveButton("是",newDialogInterface.OnClickListener(){
  6. publicvoidonClick(DialogInterfacedialog,intwhich){
  7. //..............功能代码................//
  8. }
  9. })
  10. .setNegativeButton("否",newDialogInterface.OnClickListener(){
  11. publicvoidonClick(DialogInterfacedialog,intwhich){
  12. //..............功能代码................//
  13. //dialog.dismiss();
  14. }
  15. })
  16. .create()
  17. .show();
2.创建简单列表项对话框(which为列表索引) AlertDialog.Builder调用setItems()方法即可设置简单列表项对话框,需要注意的是调用该方法时需要传入一个数组或数组资源的ID,其中参数which为选择哪一项编号。 (1)对话框样式
(2)代码实现
  1. finalCharSequence[]items=newCharSequence[]{"星期一","星期二","星期三","星期四","星期五"};
  2. AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
  3. builder.setTitle("时间表")
  4. .setIcon(R.drawable.dialog_icon)
  5. .setCancelable(false)
  6. //简单列表对话框
  7. .setItems(items,newOnClickListener(){
  8. publicvoidonClick(DialogInterfacedialog,intwhich){
  9. Toast.makeText(MainActivity.this,"今天是:"+items[which],Toast.LENGTH_SHORT).show();
  10. }
  11. })
  12. /**
  13. *确认按钮
  14. **/
  15. .setPositiveButton("是",newDialogInterface.OnClickListener(){
  16. publicvoidonClick(DialogInterfacedialog,intwhich){
  17. //.......功能代码
  18. }
  19. })
  20. /**
  21. *取消按钮
  22. **/
  23. .setNegativeButton("否",newDialogInterface.OnClickListener(){
  24. publicvoidonClick(DialogInterfacedialog,intwhich){
  25. dialog.dismiss();
  26. }
  27. }).create().show();
3.创建单选列表项对话框(which为列表索引) AlertDialog.Builder调用setSingleChoiceItems()方法即可创建带单选列表项的对话框。调用setSingleChoiceItems()方法时可传入数组或数组资源的ID、或Cursor(相当于数据库查询结果集)、或ListAdapter 作为参数 。如果传入ListAdapter作为参数,则由ListAdapter来提供多个列表项组件,也相当于自定义布局对话框。 (1)对话框样式
(2)代码实现
  1. finalCharSequence[]items=newCharSequence[]{"星期一","星期二","星期三","星期四","星期五"};
  2. AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
  3. builder.setTitle("时间表")
  4. .setIcon(R.drawable.dialog_icon)
  5. .setCancelable(false)
  6. //设置单选列表项,默认选中第二项(索引为1)
  7. .setSingleChoiceItems(items,1,newOnClickListener(){
  8. publicvoidonClick(DialogInterfacedialog,intwhich){
  9. Toast.makeText(MainActivity.this,"今天是:"+items[which],Toast.LENGTH_SHORT).show();
  10. }
  11. })
  12. /**
  13. *确认按钮
  14. **/
  15. .setPositiveButton("是",newDialogInterface.OnClickListener(){
  16. publicvoidonClick(DialogInterfacedialog,intwhich){
  17. //.......功能代码
  18. }
  19. })
  20. /**
  21. *取消按钮
  22. **/
  23. .setNegativeButton("否",newDialogInterface.OnClickListener(){
  24. publicvoidonClick(DialogInterfacedialog,intwhich){
  25. dialog.dismiss();
  26. }
  27. }).create().show();
注意:setSingleChoiceItems方法中参数1表示默认选中的对话框列表的第二项。
4.创建多选列表项对话框 AlertDialog.Builder调用setMultieChoiceItems()方法即可创建一个多选列表的对话框。调用setMultieChoiceItems()方法时可传入数组、或Cursor(相当于数据库查询结果集)作为参数。 AlertDialog.Builder.setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, OnMultiChoiceClickListener listener) 注意:boolean[]参数主要用于(1)设置初始化时选中哪些列表项;(2)该boolean类型的参数还可用于动态获取选择列表中列表项的选中状态。 (1)对话框样式
(2)代码实现
  1. finalCharSequence[]items=newCharSequence[]{"星期一","星期二","星期三","星期四","星期五"};
  2. AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
  3. builder.setTitle("时间表")
  4. .setIcon(R.drawable.dialog_icon)
  5. .setCancelable(false)
  6. //设置多选列表项,默认勾选第2项、第4项
  7. .setMultiChoiceItems(items,newboolean[]{false,true,false,true,false},null)
  8. /**
  9. *确认按钮
  10. **/
  11. .setPositiveButton("是",newDialogInterface.OnClickListener(){
  12. publicvoidonClick(DialogInterfacedialog,intwhich){
  13. //.......功能代码
  14. }
  15. })
  16. /**
  17. *取消按钮
  18. **/
  19. .setNegativeButton("否",newDialogInterface.OnClickListener(){
  20. publicvoidonClick(DialogInterfacedialog,intwhich){
  21. dialog.dismiss();
  22. }
  23. }).create().show();
5.创建自定义对话框
AlertDialog.Builder提供了一个setAdapter()方法来设置对话框的内容,该方法需要传入一个Adapter参数,这样即可由该Adapter负责提供多个列表项组件。 (1)对话框样式
(2)代码实现
  1. //创建用到的资源
  2. finalString[]names=newString[]{"毛泽东","邓小平","周恩来","朱镕基","习近平"};
  3. finalString[]descs=newString[]{"中华人民共和国开国领袖","改革开放领路人","敬爱的周总理","中国最具影响力总理之一","中国梦领路人"};
  4. finalint[]imageIds=newint[]{R.drawable.image01,R.drawable.image02,R.drawable.image03,R.drawable.image04,R.drawable.image05};
  5. //创建一个List集合,List集合的元素是Map对象
  6. List<Map<String,Object>>listItems=newArrayList<Map<String,Object>>();
  7. for(inti=0;i<names.length;i++){
  8. Map<String,Object>listItem=newHashMap<String,Object>();
  9. listItem.put("imageRes",imageIds[i]);
  10. listItem.put("personName",names[i]);
  11. listItem.put("desc",descs[i]);
  12. listItems.add(listItem);
  13. }
  14. //创建一个SimpleAdapter
  15. SimpleAdaptersimpleAdapter=newSimpleAdapter(MainActivity.this,
  16. listItems,R.layout.listline,newString[]{"personName",
  17. "imageRes","desc"},newint[]{R.id.name,
  18. R.id.header,R.id.desc});
  19. AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
  20. builder.setTitle("时间表")
  21. .setIcon(R.drawable.dialog_icon)
  22. .setCancelable(false)
  23. //自定义对话框
  24. .setAdapter(simpleAdapter,newOnClickListener(){
  25. publicvoidonClick(DialogInterfacedialog,intwhich){
  26. Toast.makeText(MainActivity.this,"您点击了第:"+which+"项",Toast.LENGTH_SHORT).show();
  27. }
  28. })
  29. /**
  30. *确认按钮
  31. **/
  32. .setPositiveButton("是",newDialogInterface.OnClickListener(){
  33. publicvoidonClick(DialogInterfacedialog,intwhich){
  34. //.......功能代码
  35. }
  36. })
  37. /**
  38. *取消按钮
  39. **/
  40. .setNegativeButton("否",newDialogInterface.OnClickListener(){
  41. publicvoidonClick(DialogInterfacedialog,intwhich){
  42. dialog.dismiss();
  43. }
  44. }).create().show();
其中,列表项布局文件R.layout.listline.xml
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="horizontal">
  6. <!--定义一个ImageView,用于作为列表项的一部分-->
  7. <ImageView
  8. android:id="@+id/header"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:paddingLeft="10dp"/>
  12. <LinearLayout
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:orientation="vertical">
  16. <!--定义一个TextView,用于作为列表项的一部分-->
  17. <TextView
  18. android:id="@+id/name"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:textSize="20dp"
  22. android:textColor="#f0f"
  23. android:paddingLeft="10dp"/>
  24. <!--定义一个TextView,用于作为列表项的一部分-->
  25. <TextView
  26. android:id="@+id/desc"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:textSize="14dp"
  30. android:textColor="#f00"
  31. android:paddingLeft="10dp"/>
  32. </LinearLayout>
  33. </LinearLayout>
注释:创建SimpleAdapter对象,需要传入五个参数 SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) (1)第1个参数:为上下文 (2)第2个参数:为List<Map<String,?>>类型的集合对象,该集合中每个Map<String,?>对象生成一个列表项 (3)第3个参数:该参数指定一个界面布局ID,如 R.layout.listline.xml用作于列表 组件 (4)第4个参数:该参数是一个String[]类型的参数,该参数决定提取Map<String,?>对象中哪些key对应的value来生成列表项 (5)第5个参数:该参数应该是一个int[]类型的参数,该参数决定填充列表项布局的哪个组件。 当然,我们也可以使用ArrayAdapter构造一个简单的列表项(只包含文本),虽然只是显示文本,但是相比使用setItems(items,listener)等方法创建列表对话框来说,可以通过setAdapter(adapter,listener)方法设置列表对话框文本显示的风格,比如字体大小、颜色、文本边距等。使用方法如下: String[] names = new String[] {"毛泽东","邓小平","周恩来"}; //数组资源 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,R.layout.listline,names); //将数组包装为 builder.setAdapter(adapter,listener); 其中,列表项布局文件R.layout.listline.xml <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="#f0f" android:paddingLeft="10dp"/> 效果如下:
6.自定义View(窗口)的对话框
AlertDialog.Builder的setView()方法可以接收一个View组件,该View组件将会作为对话框的内容。由于在Android界面编程中,一切组件继承于View,因此,我们可以使用这种方法实现各种高级的对话框。 1.对话框样式
2.代码实现
  1. //创建View对话框
  2. TableLayoutloginView=(TableLayout)getLayoutInflater().inflate(R.layout.login,null);
  3. AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
  4. builder.setTitle("用户登录")
  5. .setIcon(R.drawable.dialog_icon)
  6. .setCancelable(false)
  7. .setView(loginView)
  8. /**
  9. *确认按钮
  10. **/
  11. .setPositiveButton("是",newDialogInterface.OnClickListener(){
  12. publicvoidonClick(DialogInterfacedialog,intwhich){
  13. //.......功能代码
  14. }
  15. })
  16. /**
  17. *取消按钮
  18. **/
  19. .setNegativeButton("否",newDialogInterface.OnClickListener(){
  20. publicvoidonClick(DialogInterfacedialog,intwhich){
  21. dialog.dismiss();
  22. }
  23. }).create().show();
注意:getLayoutInflater().inflate(R.layout.login, null)目前是从指定的xml文件获取资源,填充到指定View组件中。 其中,R.layout.login.xml文件内容为:
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <TableLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <!--用户名行-->
  7. <TableRow>
  8. <TextView
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:layout_weight="2"
  12. android:text="用户名"
  13. android:textSize="20sp"/>
  14. <EditText
  15. android:id="@+id/uerName"
  16. android:layout_width="fill_parent"
  17. android:layout_height="wrap_content"
  18. android:layout_weight="3"
  19. android:hint="请填写登录帐号"
  20. android:textSize="15sp"
  21. android:selectAllOnFocus="true"/>
  22. </TableRow>
  23. <!--密码行-->
  24. <TableRow>
  25. <TextView
  26. android:layout_width="fill_parent"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="2"
  29. android:text="密码"
  30. android:textSize="20sp"/>
  31. <EditText
  32. android:id="@+id/password"
  33. android:layout_width="fill_parent"
  34. android:layout_height="wrap_content"
  35. android:layout_weight="3"
  36. android:hint="请输入密码"
  37. android:textSize="15sp"
  38. android:selectAllOnFocus="true"/>
  39. </TableRow>
  40. <!--电话号码行-->
  41. <TableRow>
  42. <TextView
  43. android:layout_width="fill_parent"
  44. android:layout_height="wrap_content"
  45. android:layout_weight="2"
  46. android:text="联系电话"
  47. android:textSize="20sp"/>
  48. <EditText
  49. android:layout_width="fill_parent"
  50. android:layout_height="wrap_content"
  51. android:layout_weight="3"
  52. android:textSize="15sp"
  53. android:hint="请输入电话号码..."
  54. android:selectAllOnFocus="true"/>
  55. </TableRow>
  56. </TableLayout>

7.使用Activity作为对话框显示 (1)对话框样式
(2)代码实现 第一步:实现一个Activity
  1. publicclassDialogActivityextendsActivity{
  2. @Override
  3. protectedvoidonCreate(BundlesavedInstanceState){
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.dialog);
  6. }
  7. publicvoidcancelDialog(Viewv){
  8. finish();//结束Activity
  9. }
  10. }
其中,Activity界面布局文件dialog.xml为
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical">
  6. <ImageView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:src="@drawable/hehe"/>
  10. <Button
  11. android:onClick="cancelDialog"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. android:text="取消"/>
  15. </LinearLayout>
第二步:在工程文件中定义该Activity并设置主题为对话框风格
  1. <activity
  2. android:name=".DialogActivity"
  3. android:theme="@android:style/Theme.Dialog"/>

更多相关文章

  1. Android常用的UI组件
  2. Android(安卓)GridView属性集合
  3. android调用webservice方法,参数或返回值使用服务器端类
  4. Android(安卓)广播的发送与接收
  5. android opengl------------------ gl10方法解析
  6. android的ant
  7. Android城市联动,城市列表展示
  8. android中java与lua的相互调用
  9. Android(安卓)控制ScrollView滚动的实例详解

随机推荐

  1. 表单设计学习
  2. 3.18作业
  3. 如何使用 Markdown and Emmet
  4. 项目练习总结
  5. 从阿里云故障说 Io hang 是什么?
  6. JavaMySQL面试题,如何书写 update 避免表
  7. 监控系统项目实施--安装与部署--添加一台
  8. 关于极客时间活动的中奖公告
  9. 线程面试必备:线程状态和dump输出状态,文末
  10. 面试必备,电商系统中并发测试是怎样进行的