免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1820 | 回复: 0
打印 上一主题 下一主题

Android40_Dialog [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-14 16:17 |只看该作者 |倒序浏览
Android40_Dialog




Dialog是Android常用的对话框控件。AlertDialog对话框是Dialog的子类,它提供一个图标,一个标题,一个文本和3个按钮。以前用过的DatePickerDialog和TimePickerDialog是Dialog的间接子类。ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。

一、AlertDialog使用方法

       1.创建对话框

              setIcon:创建图标;setTitle:设置标题;setMessage:设置内容;setPositiveButton:响应Yes/Ok的点击,setNeutralButton:响应中立行为的点击,setNegativeButton:响应No/Cancel的点击。都需要传进去一个OnClickListener的对象。

Java代码
  1. 1.dialog = new AlertDialog.Builder(this)   
  2. 2.        .setIcon(android.R.drawable.btn_star).setTitle("这是一个警告对话框")   
  3. 3.        .setMessage("确定要退出吗?")   
  4. 4.        .setPositiveButton("是", dbl)   
  5. 5.        .setNegativeButton("否", dbl)   
  6. 6.        .setNeutralButton("取消", dbl).create();   
  7. dialog = new AlertDialog.Builder(this)
  8.             .setIcon(android.R.drawable.btn_star).setTitle("这是一个警告对话框")
  9.             .setMessage("确定要退出吗?")
  10.             .setPositiveButton("是", dbl)
  11.             .setNegativeButton("否", dbl)
  12.             .setNeutralButton("取消", dbl).create();   
复制代码
2.准备显示对话框,这是一个可选的回调函数。 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int) 仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。即对话框对象每次运行之后创建一次,不会每次调用都创建,所以只能在onPrepareDialog中更改。

Java代码
  1. 1.// 每次显示对话框之前会被调用   
  2. 2.@Override  
  3. 3.public void onPrepareDialog(int id, Dialog dialog){   
  4. 4.    Toast.makeText(this, "onPrepareDialog方法被调用",   
  5. 5.        Toast.LENGTH_LONG).show();   
  6. 6.super.onPrepareDialog(id, dialog);   
  7. 7.}   
  8. // 每次显示对话框之前会被调用
  9. @Override
  10. public void onPrepareDialog(int id, Dialog dialog){
  11.     Toast.makeText(this, "onPrepareDialog方法被调用",
  12.                 Toast.LENGTH_LONG).show();
  13. super.onPrepareDialog(id, dialog);
  14. }   
复制代码
3. 添加对话框中按钮点击事件的监听器,点击取消按钮Dialog.BUTTON_NEUTRAL不会调用OnCancelListener

Java代码
  1. 1.// 对话框按钮点击事件监听器   
  2. 2.class DialogButtonListener implements DialogInterface.OnClickListener{   
  3. 3.    public void onClick(DialogInterface dialog, int which) {   
  4. 4.        switch (which) {   
  5. 5.        case Dialog.BUTTON_NEGATIVE:   
  6. 6.            Toast.makeText(AlertDialogActivity.this, "不退出",   
  7. 7.                Toast.LENGTH_LONG).show();   
  8. 8.            break;   
  9. 9.        case Dialog.BUTTON_NEUTRAL:   
  10. 10.            Toast.makeText(AlertDialogActivity.this, "取消",   
  11. 11.                Toast.LENGTH_LONG).show();   
  12. 12.            break;   
  13. 13.        case Dialog.BUTTON_POSITIVE:   
  14. 14.            Toast.makeText(AlertDialogActivity.this, "退出",   
  15. 15.                Toast.LENGTH_LONG).show();   
  16. 16.            break;   
  17. 17.        }   
  18. 18.    }   
  19. 19.}   
  20. // 对话框按钮点击事件监听器
  21. class DialogButtonListener implements DialogInterface.OnClickListener{
  22.         public void onClick(DialogInterface dialog, int which) {
  23.         switch (which) {
  24.         case Dialog.BUTTON_NEGATIVE:
  25.             Toast.makeText(AlertDialogActivity.this, "不退出",
  26.                                 Toast.LENGTH_LONG).show();
  27.             break;
  28.         case Dialog.BUTTON_NEUTRAL:
  29.             Toast.makeText(AlertDialogActivity.this, "取消",
  30.                                 Toast.LENGTH_LONG).show();
  31.             break;
  32.         case Dialog.BUTTON_POSITIVE:
  33.             Toast.makeText(AlertDialogActivity.this, "退出",
  34.                                 Toast.LENGTH_LONG).show();
  35.             break;
  36.         }
  37.     }
  38. }  
复制代码
4.显示对话框

Java代码
  1. 1.showDialog(DIALOG_ID);  
  2. showDialog(DIALOG_ID);
复制代码
同样也可以消除对话框和移除对话框,移除对话框会同时调用注册的OnCancelListener,即删除对话框对象,而消除对话框则不会删除dialog对象,下次调用的时候还是这个对象:

Java代码
  1. 1.//消除对话框   
  2. 2.dismissDialog(DIALOG_ID);   
  3. 3.//移除对话框   
  4. 4.removeDialog(DIALOG_ID);  
  5. //消除对话框
  6. dismissDialog(DIALOG_ID);
  7. //移除对话框
  8. removeDialog(DIALOG_ID);
复制代码
完整代码:

main.xml

Xml代码
  1. 1.<?xml version="1.0" encoding="utf-8"?>  
  2. 2.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. 3.    android:orientation="vertical"  
  4. 4.    android:layout_width="fill_parent"  
  5. 5.    android:layout_height="fill_parent"  
  6. 6.    >  
  7. 7.<Button   
  8. 8.    android:id="@+id/showdialog"  
  9. 9.    android:layout_width="wrap_content"  
  10. 10.    android:layout_height="wrap_content"  
  11. 11.    android:text="弹出对话框"  
  12. 12./>  
  13. 13.<Button   
  14. 14.    android:id="@+id/deletedialog"  
  15. 15.    android:layout_width="wrap_content"  
  16. 16.    android:layout_height="wrap_content"  
  17. 17.    android:text="关闭对话框"  
  18. 18./>  
  19. 19.<Button   
  20. 20.    android:id="@+id/removedialog"  
  21. 21.    android:layout_width="wrap_content"  
  22. 22.    android:layout_height="wrap_content"  
  23. 23.    android:text="移除对话框"  
  24. 24./>  
  25. 25.</LinearLayout>  
  26. <?xml version="1.0" encoding="utf-8"?>
  27. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  28.     android:orientation="vertical"
  29.     android:layout_width="fill_parent"
  30.     android:layout_height="fill_parent"
  31.     >
  32. <Button
  33.         android:id="@+id/showdialog"
  34.     android:layout_width="wrap_content"
  35.     android:layout_height="wrap_content"
  36.     android:text="弹出对话框"
  37. />
  38. <Button
  39.         android:id="@+id/deletedialog"
  40.     android:layout_width="wrap_content"
  41.     android:layout_height="wrap_content"
  42.     android:text="关闭对话框"
  43. />
  44. <Button
  45.         android:id="@+id/removedialog"
  46.     android:layout_width="wrap_content"
  47.     android:layout_height="wrap_content"
  48.     android:text="移除对话框"
  49. />
  50. </LinearLayout>
  51. AlertDialogActivity.java
复制代码
Java代码
  1. 1.package com.android.activity;   
  2. 2.import android.app.Activity;   
  3. 3.import android.app.AlertDialog;   
  4. 4.import android.app.Dialog;   
  5. 5.import android.content.DialogInterface;   
  6. 6.import android.os.Bundle;   
  7. 7.import android.view.View;   
  8. 8.import android.view.View.OnClickListener;   
  9. 9.import android.widget.Button;   
  10. 10.import android.widget.Toast;   
  11. 11.public class AlertDialogActivity extends Activity {   
  12. 12.    private Button showDialog = null;   
  13. 13.    private Button deleteDialog = null;   
  14. 14.    private Button removeDialog = null;   
  15. 15.    private Dialog dialog = null;   
  16. 16.    DialogButtonListener dbl = null;   
  17. 17.    private static final int DIALOG_ID = 1;   
  18. 18.    @Override  
  19. 19.    public void onCreate(Bundle savedInstanceState) {   
  20. 20.        super.onCreate(savedInstanceState);   
  21. 21.        setContentView(R.layout.main);   
  22. 22.        showDialog = (Button)findViewById(R.id.showdialog);   
  23. 23.        deleteDialog = (Button)findViewById(R.id.deletedialog);   
  24. 24.        removeDialog = (Button)findViewById(R.id.removedialog);   
  25. 25.        dbl = new DialogButtonListener();   
  26. 26.        showDialog.setOnClickListener(new ShowButtonListener());   
  27. 27.        deleteDialog.setOnClickListener(new DeleteButtonListener());   
  28. 28.        removeDialog.setOnClickListener(new RemoveButtonListener());   
  29. 29.    }   
  30. 30.    // 创建会话框时调用   
  31. 31.    @Override  
  32. 32.    public Dialog onCreateDialog(int id) {   
  33. 33.        Toast.makeText(this, "onCreateDialog方法被调用",   
  34. 34.            Toast.LENGTH_LONG).show();   
  35. 35.        dialog = new AlertDialog.Builder(this)   
  36. 36.                .setIcon(android.R.drawable.btn_star)   
  37. 37.            .setTitle("这是一个警告对话框!")   
  38. 38.                .setMessage("确定要退出吗?")   
  39. 39.                .setPositiveButton("是", dbl)   
  40. 40.                .setNegativeButton("否", dbl)   
  41. 41.                .setNeutralButton("取消", dbl).create();   
  42. 42.        return dialog;   
  43. 43.    }   
  44. 44.    // 每次显示对话框之前会被调用   
  45. 45.    @Override  
  46. 46.    public void onPrepareDialog(int id, Dialog dialog){   
  47. 47.        Toast.makeText(this, "onPrepareDialog方法被调用",   
  48. 48.            Toast.LENGTH_LONG).show();   
  49. 49.         super.onPrepareDialog(id, dialog);   
  50. 50.    }   
  51. 51.    // 对话框按钮点击事件监听器   
  52. 52.    class DialogButtonListener implements DialogInterface.OnClickListener{   
  53. 53.        public void onClick(DialogInterface dialog, int which) {   
  54. 54.            switch (which) {   
  55. 55.            case Dialog.BUTTON_NEGATIVE:   
  56. 56.                Toast.makeText(AlertDialogActivity.this,   
  57. 57.                    "不退出",Toast.LENGTH_LONG).show();   
  58. 58.                break;   
  59. 59.            case Dialog.BUTTON_NEUTRAL:   
  60. 60.                Toast.makeText(AlertDialogActivity.this,   
  61. 61.                    "取消",Toast.LENGTH_LONG).show();   
  62. 62.                break;   
  63. 63.            case Dialog.BUTTON_POSITIVE:   
  64. 64.                Toast.makeText(AlertDialogActivity.this,   
  65. 65.                    "退出",Toast.LENGTH_LONG).show();   
  66. 66.                break;   
  67. 67.            }   
  68. 68.        }   
  69. 69.    }   
  70. 70.    //弹出对话框按钮监听器   
  71. 71.    class ShowButtonListener implements OnClickListener{   
  72. 72.        public void onClick(View v) {   
  73. 73.            //显示对话框   
  74. 74.            showDialog(DIALOG_ID);   
  75. 75.        }   
  76. 76.    }   
  77. 77.    //关闭对话框按钮监听器   
  78. 78.    class DeleteButtonListener implements OnClickListener{   
  79. 79.        public void onClick(View v) {   
  80. 80.             //关闭对话框   
  81. 81.             dismissDialog(DIALOG_ID);   
  82. 82.        }   
  83. 83.    }   
  84. 84.    //移除对话框按钮监听器   
  85. 85.    class RemoveButtonListener implements OnClickListener{   
  86. 86.        public void onClick(View v) {   
  87. 87.            //移除对话框 ,会同时调用注册的OnCancelListener()   
  88. 88.            removeDialog(DIALOG_ID);   
  89. 89.        }   
  90. 90.    }   
  91. 91.}  
  92. package com.android.activity;
  93. import android.app.Activity;
  94. import android.app.AlertDialog;
  95. import android.app.Dialog;
  96. import android.content.DialogInterface;
  97. import android.os.Bundle;
  98. import android.view.View;
  99. import android.view.View.OnClickListener;
  100. import android.widget.Button;
  101. import android.widget.Toast;
  102. public class AlertDialogActivity extends Activity {
  103.         private Button showDialog = null;
  104.         private Button deleteDialog = null;
  105.         private Button removeDialog = null;
  106.         private Dialog dialog = null;
  107.         DialogButtonListener dbl = null;
  108.         private static final int DIALOG_ID = 1;
  109.         @Override
  110.     public void onCreate(Bundle savedInstanceState) {
  111.         super.onCreate(savedInstanceState);
  112.         setContentView(R.layout.main);
  113.         showDialog = (Button)findViewById(R.id.showdialog);
  114.         deleteDialog = (Button)findViewById(R.id.deletedialog);
  115.         removeDialog = (Button)findViewById(R.id.removedialog);
  116.         dbl = new DialogButtonListener();
  117.         showDialog.setOnClickListener(new ShowButtonListener());
  118.         deleteDialog.setOnClickListener(new DeleteButtonListener());
  119.         removeDialog.setOnClickListener(new RemoveButtonListener());
  120.     }
  121.         // 创建会话框时调用
  122.     @Override
  123.     public Dialog onCreateDialog(int id) {
  124.         Toast.makeText(this, "onCreateDialog方法被调用",
  125.                         Toast.LENGTH_LONG).show();
  126.         dialog = new AlertDialog.Builder(this)
  127.                             .setIcon(android.R.drawable.btn_star)
  128.                         .setTitle("这是一个警告对话框!")
  129.                             .setMessage("确定要退出吗?")
  130.                             .setPositiveButton("是", dbl)
  131.                             .setNegativeButton("否", dbl)
  132.                             .setNeutralButton("取消", dbl).create();
  133.         return dialog;
  134.     }
  135.     // 每次显示对话框之前会被调用
  136.     @Override
  137.     public void onPrepareDialog(int id, Dialog dialog){
  138.         Toast.makeText(this, "onPrepareDialog方法被调用",
  139.                         Toast.LENGTH_LONG).show();
  140.          super.onPrepareDialog(id, dialog);
  141.     }
  142.         // 对话框按钮点击事件监听器
  143.         class DialogButtonListener implements DialogInterface.OnClickListener{
  144.         public void onClick(DialogInterface dialog, int which) {
  145.             switch (which) {
  146.             case Dialog.BUTTON_NEGATIVE:
  147.                 Toast.makeText(AlertDialogActivity.this,
  148.                                         "不退出",Toast.LENGTH_LONG).show();
  149.                 break;
  150.             case Dialog.BUTTON_NEUTRAL:
  151.                 Toast.makeText(AlertDialogActivity.this,
  152.                                         "取消",Toast.LENGTH_LONG).show();
  153.                 break;
  154.             case Dialog.BUTTON_POSITIVE:
  155.                 Toast.makeText(AlertDialogActivity.this,
  156.                                         "退出",Toast.LENGTH_LONG).show();
  157.                 break;
  158.             }
  159.         }
  160.         }
  161.     //弹出对话框按钮监听器
  162.     class ShowButtonListener implements OnClickListener{
  163.                 public void onClick(View v) {
  164.                         //显示对话框
  165.                         showDialog(DIALOG_ID);
  166.                 }
  167.     }
  168.     //关闭对话框按钮监听器
  169.     class DeleteButtonListener implements OnClickListener{
  170.                 public void onClick(View v) {
  171.                          //关闭对话框
  172.                          dismissDialog(DIALOG_ID);
  173.                 }
  174.     }
  175.     //移除对话框按钮监听器
  176.     class RemoveButtonListener implements OnClickListener{
  177.                 public void onClick(View v) {
  178.                         //移除对话框 ,会同时调用注册的OnCancelListener()
  179.                         removeDialog(DIALOG_ID);
  180.                 }
  181.     }
  182. }
复制代码
运行结果:





二、ProgressDialog使用方法

Main.xml

Xml代码
  1. 1.<?xml version="1.0" encoding="utf-8"?>  
  2. 2.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. 3.    android:orientation="vertical"  
  4. 4.    android:layout_width="fill_parent"  
  5. 5.    android:layout_height="fill_parent"  
  6. 6.    >  
  7. 7.<TextView     
  8. 8.    android:layout_width="fill_parent"   
  9. 9.    android:layout_height="wrap_content"   
  10. 10.    android:text="@string/hello"  
  11. 11.    />  
  12. 12.<Button android:text="圆形进度对话框"   
  13. 13.    android:id="@+id/spinnerprogress"   
  14. 14.    android:layout_width="wrap_content"   
  15. 15.    android:layout_height="wrap_content"/>  
  16. 16.<Button android:text="长方形进度对话框"   
  17. 17.    android:id="@+id/horizonalprogress"   
  18. 18.    android:layout_width="wrap_content"   
  19. 19.    android:layout_height="wrap_content"/>  
  20. 20.</LinearLayout>   
  21. <?xml version="1.0" encoding="utf-8"?>
  22. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  23.     android:orientation="vertical"
  24.     android:layout_width="fill_parent"
  25.     android:layout_height="fill_parent"
  26.     >
  27. <TextView  
  28.     android:layout_width="fill_parent"
  29.     android:layout_height="wrap_content"
  30.     android:text="@string/hello"
  31.     />
  32. <Button android:text="圆形进度对话框"
  33.         android:id="@+id/spinnerprogress"
  34.         android:layout_width="wrap_content"
  35.         android:layout_height="wrap_content"/>
  36. <Button android:text="长方形进度对话框"
  37.         android:id="@+id/horizonalprogress"
  38.         android:layout_width="wrap_content"
  39.         android:layout_height="wrap_content"/>
  40. </LinearLayout> ProgressDialogActivity.java
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP