当前位置: 代码迷 >> Android >> Android对话框使用详解(2)
  详细解决方案

Android对话框使用详解(2)

热度:40   发布时间:2016-04-28 00:47:32.0
Android对话框使用详解(二)
博客地址:http://blog.csdn.net/u012637501/article/details/46003413
一、使用PopupWindow创建对话框风格的窗口
    使用PopupWindow创建对话框风格的窗口步骤如下:
    >调用PopupWindow的构造器创建PopupWindow对象;
    >调用PopupWindow的showAsDropDown(View v)将PopupWindow作为v组件的下拉组件显示出来;或调用PopupWindow的showAtLocation()方法将PopupWindow在指定位置显示出来。
    >调用PopupWindow的dismiss()方法取消显示popup窗口;
(1)对话框样式

(2)代码实现
  1. View view = getLayoutInflater().inflate(R.layout.dialog, null);     //装载R.layout.popup对应的界面布局  
  2.      final PopupWindow popup = new PopupWindow(view, 500300); //指定布局资源,窗口高度、长度  
  3.  //  popup.showAsDropDown(view);                                     //以下拉方式显示   
  4.      popup.showAtLocation(findViewById(R.id.dialogBtn), Gravity.CENTER, 100100);  
  5.      popup.dismiss();          
  注:R.layout.dialog.xml只包含一个ImageVIew和Button组件
二、使用DatePickDialog、TimePickerDialog对话框
    使用DataPickDialog、TimePickerDialog创建日期时间对话框,主要步骤如下:
    >通过new关键字创建DatePickerDialog、TimePickerDialog实例,调用它们的show()方法显示日期选择对话框和时间选择对话框;
    >为DatePickerDialog、TimePickerDialog绑定监听器,通过设置事件触发监听器,获取用户设置的事件
    其中
        DatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)
        TimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)
1.对话框样式

2.代码实现
  1.     Calendar calendar = Calendar.getInstance();  
  2.  new DatePickerDialog(MainActivity.thisnew DatePickerDialog.OnDateSetListener() {  
  3.     public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {  
  4.     Toast.makeText(MainActivity.this"你选择的日期为:"+year+":"+monthOfYear+":"  
  5.                                                                     +dayOfMonth, Toast.LENGTH_SHORT).show();  
  6.         }  
  7.      }  
  8.     //初始化日期  
  9.     , calendar.get(Calendar.YEAR)  
  10.     , calendar.get(Calendar.MONTH)  
  11.     , calendar.get(Calendar.DAY_OF_MONTH)).show();  
  12.     /************************************************************************/  
  13.        Calendar calendar = Calendar.getInstance();  
  14.     new TimePickerDialog(MainActivity.thisnew OnTimeSetListener() {  
  15.    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  
  16.     Toast.makeText(MainActivity.this"你选择的时间为:"+hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();  
  17.    }  
  18.   }  
  19.     //初始化时间  
  20.     , calendar.get(Calendar.HOUR_OF_DAY)  
  21.     , calendar.get(Calendar.MINUTE),  
  22.     //true表示采用24小时制  
  23.     true).show();  
三、使用ProgressDialog创建进度条对话框
    使用ProgressDialog创建进度对话框主要有两种方式:
    >如果只是创建简单的进度对话框,调用ProgressDialog提供的静态show()方法显示对话框即可;
        ProgressDialog progressDialog = ProgressDialog.show( LoginActivity.this, "", "正在登录,请稍后.....");
        progressDialog.dismiss();    //取消进度条对话框
    >创建ProgeressDialog,然后调用方法对话框里的进度条进行设置,设置完成后将对话框显示处理,ProgressDialog包含以下常用方法:
        setIndeteminate(boolean indeteminate):设置对话框里的进度条不显示进度值;
        setMax(int max):设置对话框里进度条的最大值;
        setMax(int max):设置对话框里进度条的最大值;
        setMessage(CharSequence message):设置对话框里显示的消息
        setProgress(int value):设置对话框里进度条的进度值
        setProgressStyle(int style):设置对话框里进度条的风格
1.对话框样式

2.代码实现
  1.  public class MainActivity extends Activity {  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.          //进度条  
  8.         ProgressDialog progressDialog = null;  
  9.        final static int MAX_PROGRESS = 100;  
  10.         private int[]  data = new int[60];  
  11.         int progressStatus = 0;  
  12.         int hasData = 0;   
  13.     }  
  14.    
  15.     /** 
  16.      * 定义一个负责更新进度条的Handler 
  17.      * */  
  18.     Handler handler = new Handler(){  
  19.      public void handleMessage(Message msg) {  
  20.       if(msg.what == 0x110){  
  21.        progressDialog.setProgress(progressStatus);  
  22.       }  
  23.      };  
  24.     };  
  25.     public void dialogBtn(View v){  
  26.      /** 
  27.       * 创建一个进度条对话框 
  28.       * */  
  29.      progressDialog = new ProgressDialog(this);  //实例化一个ProgressDialog对象  
  30.      progressDialog.setTitle("任务进行中");  
  31.      progressDialog.setMessage("任务正在执行中,请稍后");  
  32.      progressDialog.setCancelable(false);    //设置对话框能够触屏关闭  
  33.      progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //设置对话框的进度条风格  
  34.      progressDialog.setIndeterminate(false);     //设置对话框的进度条是否显示进度  
  35.      progressDialog.show();  //显示对话框  
  36.      /** 
  37.       * 创建一个子线程,定时发送消息给Handler 
  38.       * */  
  39.      new Thread(new Runnable(){  
  40.    public void run() {  
  41.     while(progressStatus < MAX_PROGRESS){  
  42.      progressStatus = MAX_PROGRESS*doWork()/data.length;     //获取耗时操作的完成百分比  
  43.      handler.sendEmptyMessage(0x110);  
  44.     }  
  45.     if(progressStatus >= MAX_PROGRESS){   //任务完成,退出对话框  
  46.      progressDialog.dismiss();  
  47.     }  
  48.    }  
  49.      }).start();  
  50.     }  
  51.     /** 
  52.      * 模拟一个耗时的操作 
  53.      * */  
  54.  protected int doWork() {  
  55.   data[hasData++] = (int)(Math.random()*100);  
  56.   try{  
  57.    Thread.sleep(500);    //0.5s更新一次  
  58.   }catch(InterruptedException e){  
  59.    e.printStackTrace();  
  60.   }  
  61.   return hasData;  
  62.  }  
  63. }  
注意:int[]  data = new int[60];是因为当数组大小为50时,在耗时操作模块累加出现数组下标越界错误。
    java.lang.ArrayIndexOutOfBoundsException: length=50; index=50

  相关解决方案