[关闭]
@coder-pig 2015-09-30T03:06:10.000000Z 字数 4505 阅读 1041

Android基础入门教程——2.5.4 其他几种常用对话框基本使用

Android基础入门教程


本节引言:

上节我们对Dialog的父类:AlertDialog进行了学习,而本节我们来学习下几个常用的
Dialog的基本使用,他们分别是:ProgressDialog(进度条对话框),DatePickerDialog
(日期选择对话框)和TimePickerDialog(时间选择对话框)~,话不多说,开始本节内容~


1.ProgressDialog(进度条对话框)的基本使用

我们创建进度条对话框的方式有两种:

  • 1.直接调用ProgressDialog提供的静态方法show()显示
  • 2.创建ProgressDialog,再设置对话框的参数,最后show()出来

代码示例

运行效果图

关键实现代码

MainActivity.java

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. private Button btn_one;
  3. private Button btn_two;
  4. private Button btn_three;
  5. private ProgressDialog pd1 = null;
  6. private ProgressDialog pd2 = null;
  7. private final static int MAXVALUE = 100;
  8. private int progressStart = 0;
  9. private int add = 0;
  10. private Context mContext = null;
  11. //定义一个用于更新进度的Handler,因为只能由主线程更新界面,所以要用Handler传递信息
  12. final Handler hand = new Handler()
  13. {
  14. @Override
  15. public void handleMessage(Message msg) {
  16. //这里的话如果接受到信息码是123
  17. if(msg.what == 123)
  18. {
  19. //设置进度条的当前值
  20. pd2.setProgress(progressStart);
  21. }
  22. //如果当前大于或等于进度条的最大值,调用dismiss()方法关闭对话框
  23. if(progressStart >= MAXVALUE)
  24. {
  25. pd2.dismiss();
  26. }
  27. }
  28. };
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.activity_main);
  33. mContext = MainActivity.this;
  34. bindViews();
  35. }
  36. private void bindViews() {
  37. btn_one = (Button) findViewById(R.id.btn_one);
  38. btn_two = (Button) findViewById(R.id.btn_two);
  39. btn_three = (Button) findViewById(R.id.btn_three);
  40. btn_one.setOnClickListener(this);
  41. btn_two.setOnClickListener(this);
  42. btn_three.setOnClickListener(this);
  43. }
  44. @Override
  45. public void onClick(View v) {
  46. switch (v.getId()){
  47. case R.id.btn_one:
  48. //这里的话参数依次为,上下文,标题,内容,是否显示进度,是否可以用取消按钮关闭
  49. ProgressDialog.show(MainActivity.this, "资源加载中", "资源加载中,请稍后...",false,true);
  50. break;
  51. case R.id.btn_two:
  52. pd1 = new ProgressDialog(mContext);
  53. //依次设置标题,内容,是否用取消按钮关闭,是否显示进度
  54. pd1.setTitle("软件更新中");
  55. pd1.setMessage("软件正在更新中,请稍后...");
  56. pd1.setCancelable(true);
  57. //这里是设置进度条的风格,HORIZONTAL是水平进度条,SPINNER是圆形进度条
  58. pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  59. pd1.setIndeterminate(true);
  60. //调用show()方法将ProgressDialog显示出来
  61. pd1.show();
  62. break;
  63. case R.id.btn_three:
  64. //初始化属性
  65. progressStart = 0;
  66. add = 0;
  67. //依次设置一些属性
  68. pd2 = new ProgressDialog(MainActivity.this);
  69. pd2.setMax(MAXVALUE);
  70. pd2.setTitle("文件读取中");
  71. pd2.setMessage("文件加载中,请稍后...");
  72. //这里设置为不可以通过按取消按钮关闭进度条
  73. pd2.setCancelable(false);
  74. pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  75. //这里设置的是是否显示进度,设为false才是显示的哦!
  76. pd2.setIndeterminate(false);
  77. pd2.show();
  78. //这里的话新建一个线程,重写run()方法,
  79. new Thread()
  80. {
  81. public void run()
  82. {
  83. while(progressStart < MAXVALUE)
  84. {
  85. //这里的算法是决定进度条变化的,可以按需要写
  86. progressStart = 2 * usetime() ;
  87. //把信息码发送给handle让更新界面
  88. hand.sendEmptyMessage(123);
  89. }
  90. }
  91. }.start();
  92. break;
  93. }
  94. }
  95. //这里设置一个耗时的方法:
  96. private int usetime() {
  97. add++;
  98. try{
  99. Thread.sleep(100);
  100. }catch (InterruptedException e) {
  101. e.printStackTrace();
  102. }
  103. return add;
  104. }
  105. }

代码比较简单,而关于Progress的东西我们已经在前面学习过了,这里就不啰嗦了~


2.DatePickerDialog(日期选择对话框)与TimePickerDialog(时间选择对话框)

先要说明一点:
Date/TimePickerDialog只是供用户来选择日期时间,对于android系统的系统时间,
日期没有任何影响,google暂时没有公布系统日期时间设置的API,
如果要在app中设置的话,要重新编译android的系统源码,非常麻烦!

他们两个的构造方法非常相似:
DatePickerDialog(上下文;DatePickerDialog.OnDateSetListener()监听器;年;月;日)
TimePickerDialog(上下文;TimePickerDialog.OnTimeSetListener()监听器;小时,分钟,是否采用24小时制)

代码示例

运行效果图

关键实现代码

MainActivity.java

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. private Button btn_date;
  3. private Button btn_time;
  4. private String result = "";
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. bindViews();
  10. }
  11. private void bindViews() {
  12. btn_date = (Button) findViewById(R.id.btn_date);
  13. btn_time = (Button) findViewById(R.id.btn_time);
  14. btn_date.setOnClickListener(this);
  15. btn_time.setOnClickListener(this);
  16. }
  17. @Override
  18. public void onClick(View v) {
  19. result = "";
  20. switch (v.getId()){
  21. case R.id.btn_date:
  22. Calendar cale1 = Calendar.getInstance();
  23. new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {
  24. @Override
  25. public void onDateSet(DatePicker view, int year, int monthOfYear,
  26. int dayOfMonth) {
  27. //这里获取到的月份需要加上1哦~
  28. result += "你选择的是"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日";
  29. Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
  30. }
  31. }
  32. ,cale1.get(Calendar.YEAR)
  33. ,cale1.get(Calendar.MONTH)
  34. ,cale1.get(Calendar.DAY_OF_MONTH)).show();
  35. break;
  36. case R.id.btn_time:
  37. Calendar cale2 = Calendar.getInstance();
  38. new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
  39. @Override
  40. public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
  41. result = "";
  42. result += "您选择的时间是:"+hourOfDay+"时"+minute+"分";
  43. Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
  44. }
  45. }, cale2.get(Calendar.HOUR_OF_DAY), cale2.get(Calendar.MINUTE), true).show();
  46. break;
  47. }
  48. }
  49. }

代码同样很简单,就不解释了~


3.代码下载:

DialogDemo.zip
DialogDemo1.zip


本节小结:

好的,本节介绍了三个常用的Dialog,相比起以前的4.x的版本,5.0的这些原生控件,
显然要好看得多~就说这么多,谢谢~

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注