Android学习_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. dialog = new AlertDialog.Builder(this)   
  2.         .setIcon(android.R.drawable.btn_star).setTitle("这是一个警告对话框")   
  3.         .setMessage("确定要退出吗?")   
  4.         .setPositiveButton("是", dbl)   
  5.         .setNegativeButton("否", dbl)   
  6.         .setNeutralButton("取消", dbl).create();   

       2.准备显示对话框,这是一个可选的回调函数。 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int) 仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。即对话框对象每次运行之后创建一次,不会每次调用都创建,所以只能在onPrepareDialog中更改。

Java代码 复制代码  收藏代码
  1. // 每次显示对话框之前会被调用   
  2. @Override  
  3. public void onPrepareDialog(int id, Dialog dialog){   
  4.     Toast.makeText(this, "onPrepareDialog方法被调用",   
  5.         Toast.LENGTH_LONG).show();   
  6. super.onPrepareDialog(id, dialog);   
  7. }   

       3. 添加对话框中按钮点击事件的监听器,点击取消按钮Dialog.BUTTON_NEUTRAL不会调用OnCancelListener

Java代码 复制代码  收藏代码
  1. // 对话框按钮点击事件监听器   
  2. class DialogButtonListener implements DialogInterface.OnClickListener{   
  3.     public void onClick(DialogInterface dialog, int which) {   
  4.         switch (which) {   
  5.         case Dialog.BUTTON_NEGATIVE:   
  6.             Toast.makeText(AlertDialogActivity.this, "不退出",   
  7.                 Toast.LENGTH_LONG).show();   
  8.             break;   
  9.         case Dialog.BUTTON_NEUTRAL:   
  10.             Toast.makeText(AlertDialogActivity.this, "取消",   
  11.                 Toast.LENGTH_LONG).show();   
  12.             break;   
  13.         case Dialog.BUTTON_POSITIVE:   
  14.             Toast.makeText(AlertDialogActivity.this, "退出",   
  15.                 Toast.LENGTH_LONG).show();   
  16.             break;   
  17.         }   
  18.     }   
  19. }   

  4.显示对话框

Java代码 复制代码  收藏代码
  1. showDialog(DIALOG_ID);  

  同样也可以消除对话框和移除对话框,移除对话框会同时调用注册的OnCancelListener,即删除对话框对象,而消除对话框则不会删除dialog对象,下次调用的时候还是这个对象:

Java代码 复制代码  收藏代码
  1. //消除对话框   
  2. dismissDialog(DIALOG_ID);   
  3. //移除对话框   
  4. removeDialog(DIALOG_ID);  

 完整代码:

main.xml

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <Button    
  8.     android:id="@+id/showdialog"  
  9.     android:layout_width="wrap_content"  
  10.     android:layout_height="wrap_content"  
  11.     android:text="弹出对话框"  
  12. />  
  13. <Button    
  14.     android:id="@+id/deletedialog"  
  15.     android:layout_width="wrap_content"  
  16.     android:layout_height="wrap_content"  
  17.     android:text="关闭对话框"  
  18. />  
  19. <Button    
  20.     android:id="@+id/removedialog"  
  21.     android:layout_width="wrap_content"  
  22.     android:layout_height="wrap_content"  
  23.     android:text="移除对话框"  
  24. />  
  25. </LinearLayout>  

 AlertDialogActivity.java

Java代码 复制代码  收藏代码
  1. package com.android.activity;   
  2. import android.app.Activity;   
  3. import android.app.AlertDialog;   
  4. import android.app.Dialog;   
  5. import android.content.DialogInterface;   
  6. import android.os.Bundle;   
  7. import android.view.View;   
  8. import android.view.View.OnClickListener;   
  9. import android.widget.Button;   
  10. import android.widget.Toast;   
  11. public class AlertDialogActivity extends Activity {   
  12.     private Button showDialog = null;   
  13.     private Button deleteDialog = null;   
  14.     private Button removeDialog = null;   
  15.     private Dialog dialog = null;   
  16.     DialogButtonListener dbl = null;   
  17.     private static final int DIALOG_ID = 1;   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {   
  20.         super.onCreate(savedInstanceState);   
  21.         setContentView(R.layout.main);   
  22.         showDialog = (Button)findViewById(R.id.showdialog);   
  23.         deleteDialog = (Button)findViewById(R.id.deletedialog);   
  24.         removeDialog = (Button)findViewById(R.id.removedialog);   
  25.         dbl = new DialogButtonListener();   
  26.         showDialog.setOnClickListener(new ShowButtonListener());   
  27.         deleteDialog.setOnClickListener(new DeleteButtonListener());   
  28.         removeDialog.setOnClickListener(new RemoveButtonListener());   
  29.     }   
  30.     // 创建会话框时调用   
  31.     @Override  
  32.     public Dialog onCreateDialog(int id) {   
  33.         Toast.makeText(this, "onCreateDialog方法被调用",    
  34.             Toast.LENGTH_LONG).show();   
  35.         dialog = new AlertDialog.Builder(this)   
  36.                 .setIcon(android.R.drawable.btn_star)   
  37.             .setTitle("这是一个警告对话框!")   
  38.                 .setMessage("确定要退出吗?")   
  39.                 .setPositiveButton("是", dbl)   
  40.                 .setNegativeButton("否", dbl)   
  41.                 .setNeutralButton("取消", dbl).create();   
  42.         return dialog;   
  43.     }   
  44.     // 每次显示对话框之前会被调用   
  45.     @Override  
  46.     public void onPrepareDialog(int id, Dialog dialog){   
  47.         Toast.makeText(this, "onPrepareDialog方法被调用",    
  48.             Toast.LENGTH_LONG).show();   
  49.          super.onPrepareDialog(id, dialog);   
  50.     }   
  51.     // 对话框按钮点击事件监听器   
  52.     class DialogButtonListener implements DialogInterface.OnClickListener{   
  53.         public void onClick(DialogInterface dialog, int which) {   
  54.             switch (which) {   
  55.             case Dialog.BUTTON_NEGATIVE:   
  56.                 Toast.makeText(AlertDialogActivity.this,    
  57.                     "不退出",Toast.LENGTH_LONG).show();   
  58.                 break;   
  59.             case Dialog.BUTTON_NEUTRAL:   
  60.                 Toast.makeText(AlertDialogActivity.this,    
  61.                     "取消",Toast.LENGTH_LONG).show();   
  62.                 break;   
  63.             case Dialog.BUTTON_POSITIVE:   
  64.                 Toast.makeText(AlertDialogActivity.this,    
  65.                     "退出",Toast.LENGTH_LONG).show();   
  66.                 break;   
  67.             }   
  68.         }   
  69.     }   
  70.     //弹出对话框按钮监听器   
  71.     class ShowButtonListener implements OnClickListener{   
  72.         public void onClick(View v) {   
  73.             //显示对话框   
  74.             showDialog(DIALOG_ID);   
  75.         }   
  76.     }   
  77.     //关闭对话框按钮监听器   
  78.     class DeleteButtonListener implements OnClickListener{   
  79.         public void onClick(View v) {   
  80.              //关闭对话框   
  81.              dismissDialog(DIALOG_ID);   
  82.         }   
  83.     }   
  84.     //移除对话框按钮监听器   
  85.     class RemoveButtonListener implements OnClickListener{   
  86.         public void onClick(View v) {   
  87.             //移除对话框 ,会同时调用注册的OnCancelListener()   
  88.             removeDialog(DIALOG_ID);   
  89.         }   
  90.     }   
  91. }  

 运行结果:

 

二、ProgressDialog使用方法

Main.xml

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView     
  8.     android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:text="@string/hello"  
  11.     />  
  12. <Button android:text="圆形进度对话框"    
  13.     android:id="@+id/spinnerprogress"    
  14.     android:layout_width="wrap_content"    
  15.     android:layout_height="wrap_content"/>  
  16. <Button android:text="长方形进度对话框"    
  17.     android:id="@+id/horizonalprogress"    
  18.     android:layout_width="wrap_content"    
  19.     android:layout_height="wrap_content"/>  
  20. </LinearLayout>   

ProgressDialogActivity.java

Java代码 复制代码  收藏代码
  1. package com.android.activity;   
  2. import android.app.Activity;   
  3. import android.app.ProgressDialog;   
  4. import android.content.DialogInterface;   
  5. import android.os.Bundle;   
  6. import android.view.View;   
  7. import android.view.View.OnClickListener;   
  8. import android.widget.Button;   
  9. public class ProgressDialogActivity extends Activity {   
  10.     private Button spinnerProgress = null;   
  11.     private Button horizonalProgress = null;   
  12.     private ProgressDialog progressDialog = null;   
  13.     private ProgressDialog progressDialog2 = null;   
  14.     int count = 0;   
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {   
  17.         super.onCreate(savedInstanceState);   
  18.         setContentView(R.layout.main);   
  19.         spinnerProgress = (Button)findViewById(R.id.spinnerprogress);   
  20.         horizonalProgress =    
  21.             (Button)findViewById(R.id.horizonalprogress);   
  22.         spinnerProgress.setOnClickListener(new SpinnerProgress());   
  23.         horizonalProgress.setOnClickListener(new HorizonalProgress());   
  24.     }   
  25.     class SpinnerProgress implements OnClickListener{   
  26.         public void onClick(View view) {   
  27.             //创建ProgressDialog对象   
  28.             progressDialog = new ProgressDialog(   
  29.                 ProgressDialogActivity.this);   
  30.             //设置进度条风格,风格为圆形,旋转的   
  31.             progressDialog.setProgressStyle(   
  32.                 ProgressDialog.STYLE_SPINNER);   
  33.             //设置ProgressDialog 标题   
  34.             progressDialog.setTitle("下载");   
  35.             //设置ProgressDialog 提示信息   
  36.             progressDialog.setMessage("这是一个圆形进度条对话框");   
  37.             //设置ProgressDialog 标题图标   
  38.             progressDialog.setIcon(android.R.drawable.btn_star);   
  39.             //设置ProgressDialog 的进度条是否不明确   
  40.             progressDialog.setIndeterminate(false);   
  41.             //设置ProgressDialog 是否可以按退回按键取消   
  42.             progressDialog.setCancelable(true);   
  43.             //设置取消按钮   
  44.             progressDialog.setButton("取消",    
  45.                 new ProgressDialogButtonListener());   
  46.             // 让ProgressDialog显示   
  47.             progressDialog.show();   
  48.         }   
  49.     }   
  50.     class ProgressDialogButtonListener    
  51.             implements DialogInterface.OnClickListener{   
  52.         public void onClick(DialogInterface dialog, int which) {   
  53.             //点击"取消按钮"取消对话框   
  54.             dialog.cancel();   
  55.         }   
  56.            
  57.     }   
  58.     class HorizonalProgress implements OnClickListener{   
  59.         public void onClick(View view) {   
  60.             progressDialog2 = new ProgressDialog(   
  61.                 ProgressDialogActivity.this);   
  62.             //设置进度条风格,风格长方形的   
  63.             progressDialog2.setProgressStyle(   
  64.                 ProgressDialog.STYLE_HORIZONTAL);   
  65.             progressDialog2.setTitle("下载");   
  66.             progressDialog2.setMessage("这是一个长方形进度条对话框");   
  67.             progressDialog2.setIcon(android.R.drawable.btn_star);   
  68.             progressDialog2.setIndeterminate(false);   
  69.             progressDialog2.setCancelable(true);   
  70.             progressDialog2.setButton("取消",    
  71.                 new ProgressDialogButtonListener());   
  72.             progressDialog2.show();   
  73.             Thread t = new Thread(new ProgressThread());   
  74.             t.start();   
  75.         }   
  76.     }   
  77.     class ProgressThread implements Runnable{   
  78.         public void run() {   
  79.             try{   
  80.                 while (count <= 100){   
  81.                     // 由线程来控制进度。   
  82.                     progressDialog2.setProgress(count++);   
  83.                     Thread.sleep(100);   
  84.                 }   
  85.                 progressDialog2.setMessage("下载完成");   
  86.             }catch (InterruptedException e){   
  87.                 progressDialog2.cancel();   
  88.             }   
  89.         }   
  90.     }   
  91. }   

运行结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值