$Android中日期和时间选择器的实现
2016-04-10 10:29
483 查看
创建日期或时间选择窗口需要弹出Dialog的时候,Activity类的showDialog方法已经弃用了,而推荐使用的是DialogFragment,本文总结一下其具体用法.
(一)日期选择器
1、创建MyDatePickerDialog类,继承自DatePickerDialog类,实现构造方法,重写onDateChanged方法:
注:隐藏日期选择器的“日”选择项的方法:在MyDatePickerDialog的构造方法中添加一个参数:代表日期选择器类型的整型参数,比如0代表年月日都显示,1表示只显示年和月等,然后用如下代码来隐藏“日”选择项(隐藏年月的方法同理,时间选择器也同理):
2、创建DatePickerFragment类,继承自DialogFragment类并实现DatePickerDialog.OnDateSetListener接口,重写其onCreateDialog和onDateSet方法:
3、在活动中显示日期选择器
效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/07/73ef763c4aa1d93c6504099c57142bf7.png)
(二)时间选择器
时间选择器的使用其实和日期选择器差不多.
1、创建MyTimePickerDialog类,继承自TimePickerDialog,实现构造方法,重写onTimeChanged方法:
2、创建TimePickerFragment类,继承自DialogFragment类并实现TimePickerDialog.OnTimeSetListener接口,重写其onCreateDialog和onTimeSet方法:
3、在活动中显示时间选择器:
效果:
(一)日期选择器
1、创建MyDatePickerDialog类,继承自DatePickerDialog类,实现构造方法,重写onDateChanged方法:
import android.app.DatePickerDialog; import android.content.Context; import android.widget.DatePicker; public class MyDatePickerDialog extends DatePickerDialog { public MyDatePickerDialog (Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, callBack, year, monthOfYear, dayOfMonth); this.setTitle("选择任务的日期"); this.setButton2("取消", (OnClickListener)null); this.setButton("确定", this); //setButton和this参数组合表示这个按钮是确定按钮 } @Override public void onDateChanged(DatePicker view, int year, int month, int day) { super.onDateChanged(view, year, month, day); this.setTitle("选择任务的日期"); } }
注:隐藏日期选择器的“日”选择项的方法:在MyDatePickerDialog的构造方法中添加一个参数:代表日期选择器类型的整型参数,比如0代表年月日都显示,1表示只显示年和月等,然后用如下代码来隐藏“日”选择项(隐藏年月的方法同理,时间选择器也同理):
// 获取当前系统的语言 Locale locale = context.getResources().getConfiguration().locale; String language = locale.getLanguage(); // 隐藏日选择栏 if (language.endsWith("zh")) { ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0)) .getChildAt(0)).getChildAt(2).setVisibility(View.GONE); } else { ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0)) .getChildAt(0)).getChildAt(1).setVisibility(View.GONE); }
2、创建DatePickerFragment类,继承自DialogFragment类并实现DatePickerDialog.OnDateSetListener接口,重写其onCreateDialog和onDateSet方法:
import java.util.Calendar; import android.app.Dialog; import android.app.DialogFragment; import android.os.Bundle; import android.widget.DatePicker; import android.app.DatePickerDialog; public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); return new MyDatePickerDialog(getActivity(), this, year, month, day); } @Override public void onDateSet(DatePicker view, int year, int month, int day) { } }
3、在活动中显示日期选择器
DatePickerFragment datePickerFrg = new DatePickerFragment() { @Override public void onDateSet(DatePicker view, int year, int month, int day) { Log.d("DateSet","选择的日期是:" + year +"-" + (month + 1) + "-" + day); } }; datePickerFrg.show(getFragmentManager(), "datePickerFrg");
效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/07/73ef763c4aa1d93c6504099c57142bf7.png)
(二)时间选择器
时间选择器的使用其实和日期选择器差不多.
1、创建MyTimePickerDialog类,继承自TimePickerDialog,实现构造方法,重写onTimeChanged方法:
import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface.OnClickListener; import android.widget.TimePicker; public class MyTimePickerDialog extends TimePickerDialog { public MyTimePickerDialog (Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) { super(context, callBack, hourOfDay, minute, is24HourView); this.setTitle("选择任务的时间"); this.setButton2("取消", (OnClickListener)null); this.setButton("确定", this); //setButton和this参数组合表示这个按钮是确定按钮 } @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { super.onTimeChanged(view, hourOfDay, minute); this.setTitle("选择任务的时间"); } }
2、创建TimePickerFragment类,继承自DialogFragment类并实现TimePickerDialog.OnTimeSetListener接口,重写其onCreateDialog和onTimeSet方法:
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); return new MyTimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { } }
3、在活动中显示时间选择器:
TimePickerFragment timePickerFrg = new TimePickerFragment() { @Override public void onTimeSet(android.widget.TimePicker view, int hourOfDay, int minute) { Log.d("TimeSet", "选择的时间是:" + hourOfDay + ":" + minute); }; }; timePickerFrg.show(getFragmentManager(), "timePickerFrg");
效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/07/978722eb4d1d0b33d49c4603ac4d1350.png)
相关文章推荐
- 关于Android开发中启动应用但桌面不显示图标的问题
- Android-使用Gallery制作图片浏览册
- ANDROID中vnd.android.cursor的解释
- Android进阶-MVP
- Android Studio 2.0 稳定版新特性介绍
- ym—— Android 5.0学习之ListView升级版RecyclerView
- 这些小工具让你的Android 开发更高效
- Android 深入理解Android中的自定义属性
- Android之旅十四 android中的xml文件解析
- [Android]知识总结一:Activity
- Android Studio 入门
- android 屏幕翻转问题
- Android资源----ShapeDrawable
- Android中的Intent Filter匹配规则介绍
- Android性能优化-内存泄露的检查与处理
- android:ToolBar详解(手把手教程)
- android:代码中动态添加子布局
- Android里的网格空隙
- Android里的网格空隙
- Android最佳实践之触摸手势