博客地址: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)代码实现
View view = getLayoutInflater().inflate(R.layout.dialog, null);     //装载R.layout.popup对应的界面布局       final PopupWindow popup = new PopupWindow(view, 500, 300); //指定布局资源,窗口高度、长度   //  popup.showAsDropDown(view);                                     //以下拉方式显示        popup.showAtLocation(findViewById(R.id.dialogBtn), Gravity.CENTER, 100, 100);       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.代码实现
Calendar calendar = Calendar.getInstance();new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {      public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {      Toast.makeText(MainActivity.this, "你选择的日期为:"+year+":"+monthOfYear+":"                                                                      +dayOfMonth, Toast.LENGTH_SHORT).show();          }       }      //初始化日期      , calendar.get(Calendar.YEAR)      , calendar.get(Calendar.MONTH)      , calendar.get(Calendar.DAY_OF_MONTH)).show();      /****/         Calendar calendar = Calendar.getInstance();      new TimePickerDialog(MainActivity.this, new OnTimeSetListener() {     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {      Toast.makeText(MainActivity.this, "你选择的时间为:"+hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();     }    }      //初始化时间      , calendar.get(Calendar.HOUR_OF_DAY)      , calendar.get(Calendar.MINUTE),      //true表示采用24小时制      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.代码实现
public class MainActivity extends Activity {        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);           //进度条          ProgressDialog progressDialog = null;         final static int MAX_PROGRESS = 100;          private int[]  data = new int[60];          int progressStatus = 0;          int hasData = 0;       }         /       定义一个负责更新进度条的Handler       */      Handler handler = new Handler(){       public void handleMessage(Message msg) {        if(msg.what == 0x110){         progressDialog.setProgress(progressStatus);        }       };      };      public void dialogBtn(View v){       /*        创建一个进度条对话框        /       progressDialog = new ProgressDialog(this);  //实例化一个ProgressDialog对象       progressDialog.setTitle("任务进行中");       progressDialog.setMessage("任务正在执行中,请稍后");       progressDialog.setCancelable(false);    //设置对话框能够触屏关闭       progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //设置对话框的进度条风格       progressDialog.setIndeterminate(false);     //设置对话框的进度条是否显示进度       progressDialog.show();  //显示对话框       /        创建一个子线程,定时发送消息给Handler        /       new Thread(new Runnable(){     public void run() {      while(progressStatus < MAX_PROGRESS){       progressStatus = MAX_PROGRESSdoWork()/data.length;     //获取耗时操作的完成百分比       handler.sendEmptyMessage(0x110);      }      if(progressStatus >= MAX_PROGRESS){   //任务完成,退出对话框       progressDialog.dismiss();      }     }       }).start();      }      /*       模拟一个耗时的操作       /   protected int doWork() {    data[hasData++] = (int)(Math.random()*100);    try{     Thread.sleep(500);    //0.5s更新一次    }catch(InterruptedException e){     e.printStackTrace();    }    return hasData;   }  }
注意:int[]  data = new int[60];是因为当数组大小为50时,在耗时操作模块累加出现数组下标越界错误。
java.lang.ArrayIndexOutOfBoundsException: length=50; index=50