前言:有的时候我们需要在应用界面实时的展示当前时间,最近的项目中刚好也有类似的需求,今天便抽出点时间整理并记录一下,后面会附带demo的地址
首先,先展示下界面效果:
从效果图中可以清楚的看到展示了当前年月日、周几以及当前的时间,下面先说一下我的设计思路:创建三个TextView分别用于展示日期、周几以及时间,开启一个子线程每隔一秒钟刷新一下。
下面,记录一下该demo的实现过程
1、创建布局,创建三个TextView并居中显示
2、创建一个事件监听OnDateTimeListener,并定义onDateTime方法,用于监听时间变化
public interface OnDateTimelistener {
void onDateTime();
}
3、创建DateTimeUtil,在里面定义时间格式化、获取当前时间等相关的方法
4、创建一个线程,DateTimeThread,每隔一秒发送消息触发时间变化
public class DateTimeThread extends Thread{
private OnDateTimelistener listener;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
if (listener !=null){
listener.onDateTime();
}
break;
}
}
};
public DateTimeThread(OnDateTimelistener listener) {
this.listener = listener;
}
@Override
public void run() {
super.run();
do {
try {
Thread.sleep(1000);
Message msg = new Message();
msg.what = 1;
mHandler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (true);
}
5、在Activity中继承监听事件、开启子线程、实现onDateTime、利用DateTimeUtil更新UI
public class MainActivity extends AppCompatActivity implements OnDateTimelistener{
private TextView date,time,week;
private DateTimeUtil dateTimeUtil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
date = (TextView)findViewById(R.id.date);
time = (TextView)findViewById(R.id.time);
week = (TextView)findViewById(R.id.week);
dateTimeUtil = DateTimeUtil.getInstance();
new DateTimeThread(this).start();
}
@Override
public void onDateTime() {
date.setText(dateTimeUtil.getCurrentDate());
week.setText(dateTimeUtil.getCurrentWeekDay(0));
time.setText(dateTimeUtil.getCurrentTimeHHMM());
}
}
附上项目地址