上一期学习了AnalogClock、DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chronometer。
一、CalendarView
日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触 摸来滚动日历。如果希望监控该组件的日期改变,则可调用CalendarView的 setOnDateChangeListener()方法为此组件的点击事件添加事件监听器。
用CalendarView时可指定如下表所示的常见XML属性及相关方法。
XML属性 | 相关方法 | 说明 |
---|---|---|
android:dateTextAppearance | setDateTextAppearance(int) | 设置该日历视图的日期文字的样式 |
android:firstDayOfWeek | setFirstDayOfWeek(int) | 设置每周第一天,允许设置周一到周日任意一天作为每周的第一天 |
android:focusedMonthDateColor | setFocusedMonthDateColor(int) | 设置获取焦点的月份的日期文字的颜色 |
android:maxDate | setMaxDate(long) | 设置该日历组件支持的最大日期,以mm/dd/yyyy格式设置指定最大日期 |
android:minDate | setMinDate(long) | 设置该日历组件支持的最小日期,以mm/dd/yyyy格式设置指定最小日期 |
android:selectedDateVerticalBar | setSelectedDateVerticalBar(int) | 设置绘制在选中日期两边额竖线对应额Drawable |
android:selectedWeekBackGroundColor | setSelectedWeekBackGroundColor(int) | 设置被选中周的背景色 |
android:showWeekNumber | setShowWeekNumber(boolean) | 设置是否显示第几周 |
android:shownWeekCount | setShownWeekCount(int) | 设置该日历组件总共显示几个星期 |
android:unfocusedMonthDateColor | setUnfocusedMonthDateColor(int) | 设置没有焦点的月份的日期文字的颜色 |
android:weekDayTextAppearance | setWeekDayTextAppearance(int) | 设置星期几的文字样式 |
android:weekNumberColor | setWeekNumberColor(int) | 设置显示周编号的颜色 |
android:weekSeparatorLineColor | setWeekSeparatorLineColor(int) | 设置周分割线的颜色 |
接下来通过一个简单的示例程序来学习CalendarView的使用。
继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建calendarview_layout.xml文件,在其中填充如下代码片段:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<CalendarView
android:id="@+id/calendarView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:firstDayOfWeek="3"
android:shownWeekCount="4" />
</RelativeLayout>
修改MainActivity里面的代码,加载上述定义的布局文件,然后运行程序,可以看到下图所示界面效果。
二、Chronometer
Chronometer是一个简单的定时器,可以通过setBase()来给它一个基准时间,并从该时间开始计数;如果不给基准时间,将使用调用start()方法时的时间。默认将显示当前"MM:SS"或 "H:MM:SS"格式的时间,当然也可以自定义字符串来格式化显示。
Chronometer的一个比较重要的XML属性如下:
Chronometer的一些常用方法如下:
在使用Chronometer时,如果希望监控该组件的时间,则可调用Chronometer的 setOnChronometerTickListener()方法为此组件的点击事件添加事件监听器。
接下来通过一个简单的示例程序来学习Chronometer的使用。
仍然使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建chronnmeter_layout.xml文件,在其中填充如下代码片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onStart"
android:text="开始计时" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onStop"
android:text="停止计时" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onReset"
android:text="重置" />
</LinearLayout>
<Chronometer
android:id="@+id/chronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"/>
</LinearLayout>
接下来在Activity中完成Chronometer格式化,并响应用户的操作。新建ChronometerActivity.java文件,加载上面新建的布局文件,初始化DatePicker并获取用户的选择,具体代码如下:
package com.jinyu.cqkxzsxy.android.advancedviewsample;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Chronometer;
/**
* @创建者 鑫鱻
* @描述 Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert
*/
public class ChronometerActivity extends AppCompatActivity {
private Chronometer mChronometer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chronnmeter_layout);
mChronometer = (Chronometer) findViewById(R.id.chronometer);
//setFormat设置用于显示的格式化字符串。
//替换字符串中第一个“%s”为当前"MM:SS"或 "H:MM:SS"格式的时间显示。
mChronometer.setFormat("计时:%s");
}
// 开始计时
public void onStart(View view) {
mChronometer.start();
}
// 停止计时
public void onStop(View view) {
mChronometer.stop();
}
// 重置
public void onReset(View view) {
//setBase 设置基准时间
//设置参数base为SystemClock.elapsedRealtime()即表示从当前时间开始重新计时)。
mChronometer.setBase(SystemClock.elapsedRealtime());
}
}
运行程序,可以看到下图所示界面效果。
至此,关于时间和日期类的组件基本学得差不多了,你都掌握得怎么样呢?