Android时间选择器和日期选择器的使用注意
本文就时间和日期选择器做一个简单的使用
时间选择器
一般设置时间我们都会选择TimePicker或者TimePickerDialog,因为TimePickerDialog直接就是对话框使用方便,所以很多初学的就会更多选择TimePickerDialog,不说他会有什么不想要的效果,先看看它的使用方法
new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hour, int minute) { //在此获取时间:hour和minute,然后执行修改(要root权限) } }, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true).show();
效果如下:
我们不管效果,就单单讲它的功能,你选择了时间之后,不管是点击完成还是点击了周围使得这个对话框消失,时间都已经被修改了,也就是说记这个完成按钮形同虚设,为什么会有这样的效果呢?因为这个对话框消失的时候就会调用onTimeSet方法(不管是点完成还是周围)
这不是我们想要的效果,我们要的是点击完成修改时间,点击周围退出时不修改时间。
这时候我们可能会想到监听一下完成按钮的点击不就行了吗,好我们来试试看:
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { //在此获取时间:hour和minute,然后执行修改(要root权限) } }, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false); timePickerDialog.setTitle(R.string.title); timePickerDialog.setButton(TimePickerDialog.BUTTON_POSITIVE, getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); timePickerDialog.show();
这下好了在onClick中拿不到时间了,想想是不是可以定义一个全局变量什么的,在onTimeSet中设置,然后在onClick中拿到进行时间设置,但是,,,,这里要说但是,你会发现先执行的onclick然后执行的onTimeSet(我看有些博客说重写了onclick会不响应onTimeSet,但我这里没有遇到这个情况,就按我自己的测试结果写吧),我一开始也说了对话框消失的时候会调用onTimeSet,所以这里会出现那种每次点击确定会设置成上次选择的时间 的bug,效果很不理想,想了想,每次对话框消失的时候会调用onTimeSet,然后在其他地方又拿不到时间(就是我们滑动之后的那个时间),果断的不能用TimePickerDialog 实现我想要的效果,没办法只能选择使用较为麻烦的TimePicker。
TimePicker是一个控件,像button一样使用,得在xml中进行布局,下面是使用的详细方法。
<!--?xml version=1.0 encoding=utf-8?--><linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:padding="10dip" xmlns:android="http://schemas.android.com/apk/res/android"> <Timepicker android:id="@+id/date_picker" android:layout_gravity="center" android:layout_height="wrap_content" android:layout_margintop="5dip" android:layout_width="wrap_content"> </Timepicker > </linearlayout>
//自定义控件 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); View view = (LinearLayout) getLayoutInflater().inflate(R.layout.time_dialog, null); final TimePicker timePicker = (TimePicker) view.findViewById(R.id.time_picker); //初始化时间 calendar.setTimeInMillis(System.currentTimeMillis()); timePicker.setIs24HourView(true); timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); timePicker.setCurrentMinute(Calendar.MINUTE); //设置time布局 builder.setView(view); builder.setTitle("设置时间信息"); builder.setPositiveButton("确 定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mHour = timePicker.getCurrentHour(); mMinute = timePicker.getCurrentMinute(); dialog.cancel(); } }); builder.create().show();
这样就实现了我们想要的效果。
日期选择器
日期选择器的实现使用DatePicker和DatePickerDialog,其他的可以参考上面的时间选择器,基本都是一样的,这里不再过多的介绍。
更多相关文章
- Android对话框实现
- Android(安卓)流式布局(标签效果)
- Android(安卓)中一些小经验总结
- Android(安卓)如何去除桌面上下边框暗度逐渐变暗的效果
- RecyclerView
- android打印信息
- Android使用glide实现毛玻璃效果
- 实现android 前后摄像头切换效果
- android实现垂直方向跑马灯效果