最近因为项目需求,在界面显示时间的地方比较多,所以就调研了一下Android中的有关时间显示的控件,包括TextClock,DatePicker,TimePicker,CalendarView,DigitalClock,AnalogClock以及定时器Chronometer等,针对每一个控件我都会写一篇简短的博客记录一下
1,DatePicker和TimePicker简介
这两个单词的直译我们就可以知道他们的意思,分别是日期选择器和时间选择器的意思,我们可以先简单看一下显示效果图:
这两个控件是可多点点击选择日期和时间的,说明其本质是一个布局,因为一个简单的控件无法支持多处点击事件(事件效果不一样),所以很自然可以想到,它们的父类肯定是布局而不是简单控件。所以我们查看源码发现:
public class DatePicker extends FrameLayout
关于FrameLayout(帧布局)的简单使用可以点击查看,它是一种默认控件都摆放在左上角位置的布局。
2,简单使用
在布局中添加如下代码:
<DatePicker
android:id="@+id/date_Picker"
android:layout_width="wrap_content"
android:layout_height="350dp"
android:layout_gravity="center_horizontal" />
<TimePicker
android:id="@+id/time_Picker"
android:layout_width="wrap_content"
android:layout_height="350dp"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="30dp" />
扫描二维码关注公众号,回复:
2835237 查看本文章
在java代码中添加:
TextClock timeClock;
DigitalClock digitalClock;
date = findViewById(R.id.date_Picker);
time = findViewById(R.id.time_Picker);
// 或许当前的年月日,小时,分钟
Calendar ca = Calendar.getInstance();
year = ca.get(Calendar.YEAR);
month = ca.get(Calendar.MONTH);
day = ca.get(Calendar.DAY_OF_MONTH);
hour = ca.get(Calendar.HOUR);
minute = ca.get(Calendar.MINUTE);
// 初始化DatePicker
date.init(year, month, day, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker arg0, int year, int month,
int day) {
ClockActivity.this.year = year;
ClockActivity.this.month = month;
ClockActivity.this.day = day;
// 显示当前时间和日期
//showDate(year, month, day, hour, minute);
}
});
// 为TimePicker指定事件监听器
time.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker arg0, int hour, int minute) {
ClockActivity.this.hour = hour;
ClockActivity.this.minute = minute;
}
});
}
}
显示效果和上图是类似的,这里面对两个控件添加了事件监听,顾名思义,既然是选择器,时间和日期肯定是可选择的,我们是可以获取到选择后的日期和时间的,比如在上面代码上加上一个显示获取时间的方法:
public void timeConfirm(View view) {
// Date date1 = new Date();
// date1.setTime(date.getMaxDate());
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
// time.setIs24HourView(true);
choosedTime.setText("你选择的时间:" + "" + year + "-" + month + "-" + day + " " +
hour + ":" + minute );
// choosedTime.setText(simpleDateFormat.format(date1));
}
DatePicker里面还有其他的方法,主要有:
date.getMinDate(); //最小日期,上面有根据获取的毫秒值得到的日期代码
date.getMaxDate(); //最大日期
date.getDayOfMonth(); //几号
date.getFirstDayOfWeek();//
date.getMonth();//月份
date.getYear();//年份
date.getAutofillType(); //自动填充类型,最低API为26
TimePicker里面还有其他的方法,主要有:
time.setIs24HourView(true);效果图如下,主要观察右侧的时间选择器变化
time.getHour(); //最低API 26
time.getMinute();//最低API 26
两者最远的setXXX()方法这里就没有列举了,功能也就不多说了。
最后再加上两张图片,里面是我们针对两个控件可以调节的颜色选项: