創建日期或時間選擇窗口需要彈出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");
效果:

