$Android中日期和時間選擇器的實現


  創建日期或時間選擇窗口需要彈出Dialog的時候,Activity類的showDialog方法已經棄用了,而推薦使用的是DialogFragment,本文總結一下其具體用法.

  (一)日期選擇器

  1、創建MyDatePickerDialog類,繼承自DatePickerDialog類,實現構造方法,重寫onDateChanged方法:

 1 import android.app.DatePickerDialog;
 2 import android.content.Context;
 3 import android.widget.DatePicker;
 4 
 5 public class MyDatePickerDialog extends DatePickerDialog {
 6 
 7     public MyDatePickerDialog (Context context, OnDateSetListener callBack,
 8             int year, int monthOfYear, int dayOfMonth) {
 9         super(context, callBack, year, monthOfYear, dayOfMonth);
10         
11         this.setTitle("選擇任務的日期");        
12         this.setButton2("取消", (OnClickListener)null);
13         this.setButton("確定", this);  //setButton和this參數組合表示這個按鈕是確定按鈕
14         
15     }
16 
17     @Override
18     public void onDateChanged(DatePicker view, int year, int month, int day) {
19         super.onDateChanged(view, year, month, day);
20         this.setTitle("選擇任務的日期");
21     }
22 
23 }

  注:隱藏日期選擇器的“日”選擇項的方法:在MyDatePickerDialog的構造方法中添加一個參數:代表日期選擇器類型的整型參數,比如0代表年月日都顯示,1表示只顯示年和月等,然后用如下代碼來隱藏“日”選擇項(隱藏年月的方法同理,時間選擇器也同理):

 1      // 獲取當前系統的語言
 2         Locale locale = context.getResources().getConfiguration().locale;
 3         String language = locale.getLanguage();
 4         // 隱藏日選擇欄
 5             if (language.endsWith("zh")) {
 6                 ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0))
 7                         .getChildAt(0)).getChildAt(2).setVisibility(View.GONE);
 8             } else {
 9                 ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0))
10                         .getChildAt(0)).getChildAt(1).setVisibility(View.GONE);
11             }

  2、創建DatePickerFragment類,繼承自DialogFragment類並實現DatePickerDialog.OnDateSetListener接口,重寫其onCreateDialog和onDateSet方法:

 1 import java.util.Calendar;
 2 
 3 import android.app.Dialog;
 4 import android.app.DialogFragment;
 5 import android.os.Bundle;
 6 import android.widget.DatePicker;
 7 import android.app.DatePickerDialog;
 8 
 9 public class DatePickerFragment extends DialogFragment implements
10         DatePickerDialog.OnDateSetListener {
11     @Override
12     public Dialog onCreateDialog(Bundle savedInstanceState) {
13         final Calendar c = Calendar.getInstance();
14         int year = c.get(Calendar.YEAR);
15         int month = c.get(Calendar.MONTH);
16         int day = c.get(Calendar.DAY_OF_MONTH);
17         return new MyDatePickerDialog(getActivity(), this, year, month, day);
18     }
19 
20     @Override
21     public void onDateSet(DatePicker view, int year, int month, int day) {
22 
23     }
24 
25 }

  3、在活動中顯示日期選擇器

1         DatePickerFragment datePickerFrg = new DatePickerFragment() {
2                 @Override
3                 public void onDateSet(DatePicker view, int year, int month,
4                         int day) {
5                     Log.d("DateSet","選擇的日期是:" + year +"-" + (month + 1) + "-" + day);                }
6             };
7             datePickerFrg.show(getFragmentManager(), "datePickerFrg");

   效果:

 

  (二)時間選擇器

  時間選擇器的使用其實和日期選擇器差不多.

  1、創建MyTimePickerDialog類,繼承自TimePickerDialog,實現構造方法,重寫onTimeChanged方法:

 1 import android.app.TimePickerDialog;
 2 import android.content.Context;
 3 import android.content.DialogInterface.OnClickListener;
 4 import android.widget.TimePicker;
 5 
 6 public class MyTimePickerDialog extends TimePickerDialog {
 7 
 8     public MyTimePickerDialog (Context context, OnTimeSetListener callBack,
 9             int hourOfDay, int minute, boolean is24HourView) {
10         super(context, callBack, hourOfDay, minute, is24HourView);
11         
12         this.setTitle("選擇任務的時間");        
13         this.setButton2("取消", (OnClickListener)null);
14         this.setButton("確定", this);  //setButton和this參數組合表示這個按鈕是確定按鈕
15     }
16     
17     @Override
18     public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
19         super.onTimeChanged(view, hourOfDay, minute);
20         this.setTitle("選擇任務的時間");    
21     }
22 
23 }

  2、創建TimePickerFragment類,繼承自DialogFragment類並實現TimePickerDialog.OnTimeSetListener接口,重寫其onCreateDialog和onTimeSet方法:

 1 public class TimePickerFragment extends DialogFragment implements
 2         TimePickerDialog.OnTimeSetListener {
 3 
 4     @Override
 5     public Dialog onCreateDialog(Bundle savedInstanceState) {
 6         final Calendar calendar = Calendar.getInstance();
 7         int hour = calendar.get(Calendar.HOUR_OF_DAY);
 8         int minute = calendar.get(Calendar.MINUTE);
 9 
10         return new MyTimePickerDialog(getActivity(), this, hour, minute,
11                 DateFormat.is24HourFormat(getActivity()));
12     }
13 
14     @Override
15     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
16 
17     }
18 }

  3、在活動中顯示時間選擇器:

1         TimePickerFragment timePickerFrg = new TimePickerFragment() {
2                 @Override
3                 public void onTimeSet(android.widget.TimePicker view,
4                         int hourOfDay, int minute) {
5                     Log.d("TimeSet", "選擇的時間是:" + hourOfDay + ":" + minute);
6                 };
7             };
8             timePickerFrg.show(getFragmentManager(), "timePickerFrg");

   效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM