您的位置:首页 > 移动开发 > Android开发

跟我学Android之九 日期时间组件

2016-07-05 20:06 671 查看
本章内容


第1节 AnalogClock和DigitalClock

第2节 CalendarView

第3节 DatePicker和TimerPicker

第4节 Chronometer

第5节 Timer类


本章目标


掌握图形时钟和数字时钟的用法。

掌握日历视图的用法。

熟练掌握日期和时间选择器的用法。

熟练掌握Chronometer的用法。

熟练掌握Timer类的用法。


AnalogClock是一个模拟时钟视图,使用AnalogClock标签进行布局,除了长宽外基本需要其他属性,对应的Java类是android.widget.AnalogClock,布局示例如下:

<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content" />




DigitalClock是一个数字时钟视图,使用DigitalClock标签进行布局,除了长宽外基本需要其他属性,对应的Java类是android.widget.DigitalClock,布局示例如下:

<DigitalClock
android:layout_width="wrap_content"
android:layout_height="wrap_content" />




日历视图CalendarView,可用于显示和选择日期

<CalendarView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:firstDayOfWeek="3"
android:shownWeekCount="4"
android:selectedWeekBackgroundColor="#aff"
android:focusedMonthDateColor="#f00"
android:weekSeparatorLineColor="#ff0"
android:unfocusedMonthDateColor="#f9f"
android:id="@+id/calendarView" />


事件,选项改变事件

public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth)
{
// 使用Toast显示用户选择的日期
Toast.makeText(CalendarViewTest.this,
"你生日是" + year + "年" + month + "月" + dayOfMonth + "日" ,
Toast.LENGTH_SHORT).show();
}
});




DatePicker是一个用于日期选择的控件,使用DatePicker进行布局,常用属性如下:

android:calendarViewShown 表示是否显示完整日历

android:endYear 表示可以选择的最大年份

android:maxDate 表示日历显示的最大日期

android:spinnerShown 表示是否显示调节箭头按钮





DatePicker是一个用于日期选择的控件,对应的类是android.widget.DatePicker,常用方法如下:


init() 用于初始化显示日期和注册日期选择变化的监听器

getYear() 用于提取选中的年份

getMonth() 用于提取选中的月份

getDayOfMonth() 用于提取选中的日

布局示例如下:



<DatePicker
android:id="@+id/datepick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:calendarViewShown="true"
/>


TimePicker是一个用于时间选择的控件,使用TimePicker进行布局,除了长宽外基本不用设置其他属性


对应的类是android.widget.TimePicker,常用方法如下:

getCurrentHour() 获取当前小时

getCurrentMinute() 获取当前分钟

android.widget.TimePicker.OnTimeChangedListener为事件监听接口





计时器Chronometer,该组件与DigitalClock都继承自TextView,因此它们都会显示一段文本。但Chronometer并不显示当前时间,它显示的是从某个起始时间开始,一共过去了多长时间。

Chronometer支持如下常用方法。

setBase(long base):设置计时器的起始时间。

setFormat(String format):设置显示时间的格式。

start():开始计时。

stop():停止计时。

setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):为计时器绑定事件监听器,当计时器改变时触发该监听器。

使用Chronometer控件实现计器的操作,开始

// 设置开始计时时间

chronometer.setBase(SystemClock.elapsedRealtime());

// 开始记时

chronometer.start();


chronometer.stop(); //停止



计时器定时触发的事件

chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
public void onChronometerTick(Chronometer chronometer) {
// 如果开始计时到现在超过了startime秒
if (SystemClock.elapsedRealtime()
- chronometer.getBase() > startTime * 1000) {
chronometer.stop();
// 给用户提示
showDialog();
}
}
});


基于Chronometer制作幻灯片



Timer类

Timer类的功能与Chronometer组件类似,可以每隔特定时间执行程序代码,且功能比Chronometer组件强大

语法

Timer对象是以schedule方法执行

Timer对象名称.schedule(TimerTask对象,延迟时间,间隔时间);

TimerTask对象:是Timer对象定时执行的程序代码所在,开发者必须自己编写要执行的程序代码。延迟时间:设置多长时间后才开始执行Timer对象,单位是毫秒。间隔时间:设置间隔多长时间执行TimerTask对象一次,单位是毫秒。

TimerTask类

TimerTask对象是Timer对象的主体,也就是用来定义Timer对象定时要执行的工作内容。在TimerTask对象中run方法里的程序代码就是重复执行的代码块,语法为

private TimerTask变量名称=new  TimerTask() {
public void run()
{
执行程序代码…
}
);


Handler对象是应用程序中不同线程之间的消息中介,在TimerTask对象中使用Message对象送出消息。

public void run ()
{
Message message=new Message () ;
message.what=送出消息;
handler.sendMessage (message) ;
}


Handler对象接收消息的语法为:

private Handler变量名称=new  Handler(){
public void handleMessage(Message msg
{    super.handleMessage (msg);
switch (msg.what){
case接收消息: 	程序代码
break;
)   }};
计时秒表初始化计时器

Timer timer=new Timer();//创建Timer对象
timer.schedule(new TimerTask() {//创建TimerTask对象
public void run() {
if(flag){
tSec++;
Message msg=new Message();//创建消息对象
msg.what=1;//设定类型
handler.sendMessage(msg);//传送消息给Handler
}
}
}, 0,1000);//立刻开始执行,时间间隔为1000毫秒


计时秒表,接受消息

public void handleMessage(Message msg){//接受消息
super.handleMessage(msg);
switch(msg.what){//判断消息类型
case 1:
cSec=tSec%60;//获取秒数
cMin=tSec/60;//获取分钟数
String str=String.format("%02d:%02d", cMin,cSec);//以00:00的格式显示数据
txtClock.setText(str);
break;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: