时钟UI组件是两个非常简单的组件:TextClock本身就继承了TextView-
也就是说,它本身就是文本框,只是它里面显示的内容总是当前时间。与TextView 不同的是,为TextClock 设置android:text属性没什么作用。
TextClock取代早期的 DigitalClock 组件,因此功能更加强大——TextClock能以24小时制或12小时制来显示时间,而且可以由程序员来指定时间格式。
TextClock支持的XML属性及相关方法:

AnalogClock则继承了View组件,它重写了View的OnDraw()方法,它会在View上绘制模拟时钟。
AnalogClock支持的XML属性

TextClock和 AnalogClock 都会显示当前时间。不同的是,TextClock 显示数字时钟,可以显示当前的秒数; AnalogClock 显示模拟时钟,不会显示当前的秒数。
实例——手机里的“劳力士”
创建新模块

布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableEnd="@mipmap/ic_launcher"
android:format12Hour="yyyy年MM月dd日 H:mma EEEE"
android:textColor="#f0f"
android:textSize="20dp" />
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:dial="@drawable/watch"
android:hand_minute="@drawable/hand" />
LinearLayout>
直接运行

Android还提供了一个计时器组件:Chronometer,该组件与TextClock都继承自TextView,因此它们都会显示一段文本。但 Chronometer 并不显示当前时间,它显示的是从某个起始时间开始,一共过去了多长时间。
Chronometer的用法也很简单,它只提供了android:format和 android:countDown属性,其中前者用于指定计时器的计时格式。除此之外,Chronometer还支持如下常用方法:
新建模块

布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<Chronometer
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12pt"
android:textColor="#ffff0000"/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动"/>
LinearLayout>
逻辑代码
package com.dingjiaxiong.chronometertest;
import androidx.appcompat.app.AppCompatActivity;
import android.database.CursorJoiner;
import android.os.Bundle;
import android.os.SystemClock;
import android.widget.Button;
import android.widget.Chronometer;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取组件
Chronometer ch = findViewById(R.id.test);
//获取按钮
Button start = findViewById(R.id.start);
start.setOnClickListener((view) ->{
//设置开始计时时间
ch.setBase(SystemClock.elapsedRealtime());
//启动计时器
ch.start();
start.setEnabled(false);
});
//为Chronmeter绑定事件监听器
ch.setOnChronometerTickListener((source) ->{
//如果从开始计时到现在超过了20s
if (SystemClock.elapsedRealtime() - ch.getBase() > 5 * 1000){
ch.stop();
start.setEnabled(true);
}
});
}
}
运行效果
