今天学习Android,通过百度学习到了如何在TextView中显示电子时钟。期间还遇到如何设置格式的问题,与如何设置文本框内时间的更新速度。这篇博客主要讲这三个问题。
在TextView中显示电子时钟
xml代码
只需要在activity_main.xml中修改TextView标签即可,加入Android:id以及删去Android:text。源代码如下
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/id_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
java代码
代码思路
1.由 protected void onCreate(Bundle savedInstanceState){}中的mHandler.sendEmptyMessageDelayed(MSG_UPDATE_CURRENT_TIME, 500);在500毫秒后发送一个消息。 public void handleMessage(Message msg){}函数处理该消息。
2.public void handleMessage(Message msg){}函数中的activity.updateCurrentTime();将时间送入文本框。sendEmptyMessageDelayed(MSG_UPDATE_CURRENT_TIME, 10);10毫秒发送一个消息。
3.public void handleMessage(Message msg){}函数处理消息,处理消息时又会执行sendEmptyMessageDelayed(MSG_UPDATE_CURRENT_TIME, 10);。如此循环不间断。
package com.example.time;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import java.lang.ref.WeakReference;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private Handler mHandler;
private static final int MSG_UPDATE_CURRENT_TIME = 1;
private TextView tv_time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_time = (TextView) this.findViewById(R.id.id_time);//tv_time与文本框绑定
mHandler = new MyHandler(this);
mHandler.sendEmptyMessageDelayed(MSG_UPDATE_CURRENT_TIME, 500);
}
private static class MyHandler extends Handler {
private WeakReference<MainActivity> mActivity;
public MyHandler(MainActivity activity) {
mActivity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
MainActivity activity = mActivity.get();
switch (msg.what) {
case MSG_UPDATE_CURRENT_TIME:
activity.updateCurrentTime();
sendEmptyMessageDelayed(MSG_UPDATE_CURRENT_TIME, 10);//设置文本框内时间的更新速度,现在为10毫秒更新一次
break;
default:
break;
}
}
}
private void updateCurrentTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(" hh:mm:ss:SS");//设置输出格式,当前格式为“时:分:秒:毫秒(前两位)”
Date curDate = new Date(System.currentTimeMillis());
String time = simpleDateFormat.format(curDate);
tv_time.setText(time);
}
}
设置输出时间格式
yyyy-MM-dd HH:mm:ss:SSS
y 不包含纪元的年份。不具有前导零。
yy 不包含纪元的年份。具有前导零。
yyyy 包括纪元的四位数的年份。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。
SSS 毫秒。可设置1位,最多可设置三位。
由SimpleDateFormat类进行设置。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(" hh:mm:ss:SS");//设置输出格式,当前格式为“时:分:秒:毫秒(前两位)”
设置更新时间
更新时间取决于handler对象发消息的频率。该频率由函数sendMessageDelayed(Message message,long time)确定。
private static final int MSG_UPDATE_CURRENT_TIME = 1;
······
sendEmptyMessageDelayed(MSG_UPDATE_CURRENT_TIME, 10);//设置文本框内时间的更新速度,现在为10毫秒更新一次
gitee地址
感兴趣的读者可以下载到Android studio中。
网址:https://gitee.com/wsy1328639341/time.git