gpt4 book ai didi

Android:如何在 TextView 中显示更新时钟

转载 作者:IT老高 更新时间:2023-10-28 23:17:04 27 4
gpt4 key购买 nike

有一个我想在 TextView 中显示的时钟。

我原以为有一些不错的功能可以做到这一点,但我找不到任何东西。我最终实现了自己的使用处理程序的方式。不过我要问的是,有没有更好(更有效)的方式来显示实时更新时钟?

private Runnable mUpdateClockTask = new Runnable() {
public void run() {
setTime();
mClockHandler.postDelayed(this, 1000);
}
};

这是我的处理程序,每秒运行一次,然后我设置的时间和日期函数如下

TextView mClockView;

public void setTime() {
Calendar cal = Calendar.getInstance();
int minutes = cal.get(Calendar.MINUTE);

if (DateFormat.is24HourFormat(this)) {
int hours = cal.get(Calendar.HOUR_OF_DAY);
mClockView.setText((hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes));
}
else {
int hours = cal.get(Calendar.HOUR);
mClockView.setText(hours + ":" + (minutes < 10 ? "0" + minutes : minutes) + " " + new DateFormatSymbols().getAmPmStrings()[cal.get(Calendar.AM_PM)]);
}
}

干杯

最佳答案

更新系统时钟与更新计时器不同。我们谈论在分钟(系统时钟分钟和 00 秒)更改的时间。

使用计时器不是正确的方法。这不仅是矫枉过正,而且你必须采取一些技巧来使它正确。

执行此操作的正确方法(即更新显示时间为 HH:mm 的 TextView)是像这样使用 BroadcastReceiver:

BroadcastReceiver _broadcastReceiver;
private final SimpleDateFormat _sdfWatchTime = new SimpleDateFormat("HH:mm");
private TextView _tvTime;

@Override
public void onStart() {
super.onStart();
_broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
if (intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0)
_tvTime.setText(_sdfWatchTime.format(new Date()));
}
};

registerReceiver(_broadcastReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
}

@Override
public void onStop() {
super.onStop();
if (_broadcastReceiver != null)
unregisterReceiver(_broadcastReceiver);
}

系统将根据系统时钟在每分钟的确切开始发送此广播事件。但是不要忘记预先初始化您的 TextView(到当前系统时间),因为您可能会在一分钟中间弹出 UI,并且 TextView 直到下一分钟才会更新。

关于Android:如何在 TextView 中显示更新时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com