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, 500, 300); //指定布局资源,窗口高度、长度
  3. //  popup.showAsDropDown(view);                                     //以下拉方式显示
  4. popup.showAtLocation(findViewById(R.id.dialogBtn), Gravity.CENTER, 100, 100);
  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. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.main);
  6. //进度条
  7. ProgressDialog progressDialog = null;
  8. final static int MAX_PROGRESS = 100;
  9. private int[]  data = new int[60];
  10. int progressStatus = 0;
  11. int hasData = 0;
  12. }
  13. /**
  14. * 定义一个负责更新进度条的Handler
  15. * */
  16. Handler handler = new Handler(){
  17. public void handleMessage(Message msg) {
  18. if(msg.what == 0x110){
  19. progressDialog.setProgress(progressStatus);
  20. }
  21. };
  22. };
  23. public void dialogBtn(View v){
  24. /**
  25. * 创建一个进度条对话框
  26. * */
  27. progressDialog = new ProgressDialog(this);  //实例化一个ProgressDialog对象
  28. progressDialog.setTitle("任务进行中");
  29. progressDialog.setMessage("任务正在执行中,请稍后");
  30. progressDialog.setCancelable(false);    //设置对话框能够触屏关闭
  31. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //设置对话框的进度条风格
  32. progressDialog.setIndeterminate(false);     //设置对话框的进度条是否显示进度
  33. progressDialog.show();  //显示对话框
  34. /**
  35. * 创建一个子线程,定时发送消息给Handler
  36. * */
  37. new Thread(new Runnable(){
  38. public void run() {
  39. while(progressStatus < MAX_PROGRESS){
  40. progressStatus = MAX_PROGRESS*doWork()/data.length;     //获取耗时操作的完成百分比
  41. handler.sendEmptyMessage(0x110);
  42. }
  43. if(progressStatus >= MAX_PROGRESS){   //任务完成,退出对话框
  44. progressDialog.dismiss();
  45. }
  46. }
  47. }).start();
  48. }
  49. /**
  50. * 模拟一个耗时的操作
  51. * */
  52. protected int doWork() {
  53. data[hasData++] = (int)(Math.random()*100);
  54. try{
  55. Thread.sleep(500);    //0.5s更新一次
  56. }catch(InterruptedException e){
  57. e.printStackTrace();
  58. }
  59. return hasData;
  60. }
  61. }

注意:int[]  data = new int[60];是因为当数组大小为50时,在耗时操作模块累加出现数组下标越界错误。

java.lang.ArrayIndexOutOfBoundsException: length=50; index=50

时间: 2024-10-13 10:20:25

Android对话框使用详解(二)的相关文章

Android Widget 开发详解(二)

转载请标明出处:http://blog.csdn.net/sk719887916/article/details/47027263 不少开发项目中都会有widget功能,别小瞧了它,他也是android的七大组件之一,对widget陌生的朋友可以阅读下我的上篇文章< Android Widget工作原理详解(一)> 今天我们就实现一个可以滑动的widet,熟悉下一个普通widget的开发. 一 创建AppWidgetProvider 此类是widget的控制核心,主要控制添加,删除,更新等.他

Android对话框使用详解(一)

Android应用主要有4种类型对话框,分别为AlertDialog.ProgressDialog.DataPickerDialog.TimePickerDialog,其中后三种都是继承于AlertDialog.简要介绍如下: AlertDialog:功能最丰富.实用最广的对话框: ProgressDialog:进度条对话框: DatePickerDialog:日期选择对话框,是对DatePicker的包装: TiemPickerDialog:时间选择对话框,是对TimePicker的包装. 转

Android WebView 开发详解(二)

转载请注明出处  http://blog.csdn.net/typename/article/details/39495409 powered by meichal zhao 概览: Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情.比如说客户端需要显示网页加载的进度.网页加载发生错误等等事件. WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChr

Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介

通过第一篇的讲解,我们已经看到了如何使用Intent来启动新的应用程序组件,但是实际上他们也可以使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Intent可以在进程之间发送结构化的消息.因此,通过实现Broadcast Receiver来监听和响应应用程序内的这些Broadcast Intent. 通过使用Intent来广播一个事件,可以在不修改原始的应用程序的情况下,让我们开发人员对事件做出反应.Android大量使用了Broadcast Rec

Android清单文件详解(二) ---- 应用程序权限声明

我们知道,Android系统的各个模块提供了非常强大的功能(比如电话,电源和设置等),通过使用这些功能,应用程序可以表现的更强大,更灵活.不过,使用这些功能并不是无条件的,而是需要拥有一些权限.接下来,我们就开始讲解另一个非常重要的知识点--应用程序权限声明,其中主要包括应用程序的权限声明,自定义应用程序的访问权限和SDK版本限定. 1.<uses-permission>--应用程序的权限申请 权限 描述 android.permission.ACCESS_NETWORK_STATE 允许应用

全志Android SDK编译详解(二)

注意要确定安装了jdk) 第一步: cd  lichee; ./build.sh  -p sun5i_elite -k 3.0  (apt-get install uboot-mkimage需要安装mkimage工具) 1)打开build.sh脚本发现脚本中只有“buildroot/scripts/common.sh [email protected]”此一句话;其中[email protected]接受所有输入参数 2)继续打开 (vim) buildroot/scripts/common.s

Android资源使用详解(二)

Drawable资源通常保存在/res/drawable目录,可分为图片资源(*.png.*.jpg.*.gif等格式).XML资源等,Android SDK会在编译应用中自动加载该图片资源,并在R资源清单类中生成该资源的索引.使用方法如下: Java代码中:[<package_name>.]R.drawable.<file_name> xml代码中:[<package_name>.]@drawable/<file_name> 为了在程序中获得实际的Draw

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

[Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之——LinearLayout的layout_weight属性   4.Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局参数): 在XML文件中,我们经常看到类似与lay

Android Animation动画详解(二): 组合动画特效

前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一番,然后再过来跟着我一起学习如何把简单的动画效果组合在一起,做出比较酷炫的动画特效吧. 一. 动画的续播 如题,大家想想,如果一个页面上包含了许多动画,这些动画要求按顺序播放,即一个动画播放完成后,继续播放另一个动画,使得这些动画具有连贯性.那该如何实现呢? 有开发经验或者是逻辑思维的人肯定会想,对