Android时间选择器和日期选择器的使用注意

时间:2022-07-05 18:08:55

本文就时间和日期选择器做一个简单的使用

时间选择器

一般设置时间我们都会选择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();

效果如下:
Android时间选择器和日期选择器的使用注意

我们不管效果,就单单讲它的功能,你选择了时间之后,不管是点击完成还是点击了周围使得这个对话框消失,时间都已经被修改了,也就是说记这个完成按钮形同虚设,为什么会有这样的效果呢?因为这个对话框消失的时候就会调用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,其他的可以参考上面的时间选择器,基本都是一样的,这里不再过多的介绍。