Android数字时钟神一般的实现——TextClock

前言

    在Android上实现数字时钟,还在自己使用TextView实现?在应用界面还容易,如果在AppWidget中,时间更新将会是头疼的问题,为了解决这些烦恼,Android官方提供了TextClock类,只需要将控件放在不居中,设置自己需要时间格式即可。

更多详情请参考Google官方文档:TextClock

1. 使用方法

  • 布局文件实现,在布局文件中添加控件,设置样式等;
  • 设置时间显示格式;
  • 运行程序,查看效果。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextClock
        android:id="@+id/timeText"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:format12Hour="hh:mm"
        android:format24Hour="HH:mm"
        android:gravity="center"
        android:textColor="@android:color/black"
        android:textSize="40sp"
        android:textStyle="bold"/>
    <TextClock
        android:id="@+id/dateText"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:format12Hour="yyyy/MM/dd E"
        android:format24Hour="yyyy/MM/dd E"
        android:gravity="center"
        android:textColor="@android:color/black"
        android:textSize="16sp"/>
</LinearLayout>

    没错,就这么简单,一个简单的数字时钟就完成了,示例是AppWidget实现时间显示,关于AppWidget的相关内容请参考:为你的Android应用构建窗口小部件(App Widget)
AppWidget中实现效果

2 优缺点

  • 优点

    • 使用方便
    • 无需关注时间更新
    • 被AppWidget支持(RemoteViews支持)
  • 缺点

    • 在Android 4.2(Api level 17)开始才被支持

3 在TextClock中使用样式

    TextClock还有一个特点就是可以通过对格式化字符串添加样式,这样显示的事件也会拥有对应的样式.

在Android中为文本添加样式,可以通过Span来实现,更多关于Span的内容参考: Span

  • 示例
package com.owen.clockwidget

import android.graphics.Color
import android.os.Bundle
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.text.style.RelativeSizeSpan
import android.widget.TextClock
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    val TAG = "MainActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textClock = findViewById<TextClock>(R.id.timeText)

        val ss = SpannableString("HH:mm:ss")

        ss.setSpan(ForegroundColorSpan(Color.RED), 0, 6, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
        ss.setSpan(ForegroundColorSpan(Color.GREEN), 6, 7, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
        ss.setSpan(RelativeSizeSpan(0.5f), 6, 7, Spannable.SPAN_INCLUSIVE_INCLUSIVE)

        textClock.format24Hour = ss
    }

    override fun onDestroy() {
        super.onDestroy()
    }
}

  • 效果
    在TextClock中添加格式样式
实现一个 Android 数字时钟,你可以按照以下步骤进行: 1. 创建一个新的 Android 项目,并在布局文件中添加一个 TextView 控件,用于显示数字时钟。 2. 在 MainActivity 类中,使用 Handler 定时更新 TextView 控件的文本,以显示当前时间。 3. 在更新 TextView 的文本时,你可以使用 SimpleDateFormat 类来格式化时间,并将其显示在 TextView 中。 以下是一个参考代码: MainActivity.java ``` public class MainActivity extends AppCompatActivity { private TextView timeTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); timeTextView = findViewById(R.id.timeTextView); final Handler handler = new Handler(); Runnable runnable = new Runnable() { public void run() { updateTime(); handler.postDelayed(this, 1000); } }; handler.postDelayed(runnable, 0); } private void updateTime() { SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); Date currentTime = new Date(); String timeText = dateFormat.format(currentTime); timeTextView.setText(timeText); } } ``` activity_main.xml ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/timeTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="50sp" android:layout_centerInParent="true"/> </RelativeLayout> ``` 运行应用程序时,你应该会看到一个数字时钟在每秒钟更新一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值