前言
在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)
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()
}
}
- 效果