-
前言
最近項(xiàng)目要添加一個(gè)新功能桐智,加個(gè)Widget插件凌外,顯示天氣辩尊,時(shí)間,位置等信息康辑,類似于HTC-Sense的樣式
這里最麻煩在時(shí)間每隔一分鐘就要刷新对省,這里可以通過Service里蝗拿,定時(shí)刷新,但是存在內(nèi)存不足或者第三方清理的情況下會(huì)出現(xiàn)時(shí)間停止的現(xiàn)象蒿涎,這肯定不滿足需求哀托,最后發(fā)現(xiàn)可以使用TextClock時(shí)鐘控件。
TextClock是在Android 4.2(API 17)后推出的用來替代DigitalClock的一個(gè)控件劳秋!可以以字符串格式顯示當(dāng)前的日期和時(shí)間仓手。
TextClock提供了兩種不同的格式, 一種是在24進(jìn)制中顯示時(shí)間和日期玻淑,另一種是在12進(jìn)制中顯示時(shí)間和日期嗽冒。
TextClock可以切換字體,也可以跟隨系統(tǒng)語言來切換繁體补履,英語等語言格式添坊。
- 簡單看看源碼
/**
* Sets whether this clock should always track the current user and not the user of the
* current process. This is used for single instance processes like the systemUI who need
* to display time for different users.
*
* @hide
*/
public void setShowCurrentUserTime(boolean showCurrentUserTime) {
mShowCurrentUserTime = showCurrentUserTime;
chooseFormat();
onTimeChanged();
unregisterObserver();
registerObserver();
}
進(jìn)入 chooseFormat()
private void chooseFormat() {
chooseFormat(true);
}```
繼續(xù)
private void chooseFormat(boolean handleTicker) {
final boolean format24Requested = is24HourModeEnabled();
LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale);
if (format24Requested) {
mFormat = abc(mFormat24, mFormat12, ld.timeFormat24);
} else {
mFormat = abc(mFormat12, mFormat24, ld.timeFormat12);
}
boolean hadSeconds = mHasSeconds;
mHasSeconds = DateFormat.hasSeconds(mFormat);
if (handleTicker && mAttached && hadSeconds != mHasSeconds) {
if (hadSeconds) getHandler().removeCallbacks(mTicker);
else mTicker.run();
}
}```
is24HourModeEnabled(),是否使用24進(jìn)制時(shí)間顯示,true則進(jìn)入 mFormat = abc(mFormat24, mFormat12, ld.timeFormat24);
private static CharSequence abc(CharSequence a, CharSequence b, CharSequence c) {
return a == null ? (b == null ? c : b) : a;
}```
雙重判斷
if(a != null){
return a;
}else {
if(b != null){
return b ;
} else{
return c;
}
}```
- 簡單看完箫锤,具體使用贬蛙,無需任何操作,直接在XML布局中
<TextClock
android:id="@+id/widget_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:format24Hour="HH:mm"
android:includeFontPadding="false"
android:textSize="16sp" /> ```
######默認(rèn)系統(tǒng)語言為English
1.TextClock表示24小時(shí)和12小時(shí)的時(shí)間
android:format24Hour=”HH:mm”
android:format12Hour=”hh:mm” ```
顯示:15:10
顯示:03:10
分別表示12小時(shí)和24小時(shí)的表達(dá)格式谚攒,HH和hh表示當(dāng)時(shí)時(shí)間小于10時(shí)會(huì)在前面補(bǔ)0
如果不需要補(bǔ)0阳准,直接定義
android:format24Hour=”H:mm”
android:format12Hour=”h:mm” ```
顯示:15:10
顯示:3:10
2.TextClock表示年/月/日/ 24小時(shí)制 時(shí)/分
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="yyyy/MM/dd-hh:mm"/>```
顯示:2017/01/06-15:08
如果想顯示上午或者下午,日期顯示格式為2017-01-06
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="yyyy-MM-dd-hh:mmaa"/>```
顯示:2017-01-06-15:08PM
3.英語格式顯示日期
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="MM/dd/yyyy h:mmaa"/>```
顯示:01/06/2017 3:12PM
4.月份顯示英語月份簡寫
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="MMM/dd/yyyy h:mmaa"/>```
顯示:Jan/06/2017 3:13PM
5.月份顯示英語月份全拼
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="MMMM/dd/yyyy h:mmaa"/>```
顯示:January/06/2017 3:13PM
6.月份顯示英語月份全拼馏臭,帶上星期簡寫
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="E/MMMM/dd/yyyy h:mmaa"/>```
顯示:Fri/January/06/2017 3:13PM
7.月份顯示英語月份全拼野蝇,帶上星期全拼
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="EEEE/MMMM/dd/yyyy h:mmaa"/>```
顯示:Friday/January/06/2017 3:13PM
8.自定義顯示效果
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format24Hour="今天是yyyy/MM/dd,EEEE,當(dāng)前時(shí)間是hh:mmaa"/>```
顯示:今天是2017/01/06,Friday,當(dāng)前時(shí)間是15:20PM
######如果系統(tǒng)語言為中文,則顯示:今天是2017/01/06,星期五,當(dāng)前時(shí)間是15:20下午
9.設(shè)置顯示字體
android:fontFamily=”sans-serif-light” 括儒,有多種字體可選绕沈。
- ######總結(jié)
TextClock使用起來非常簡單,根據(jù)項(xiàng)目需求帮寻,自己定義時(shí)間的顯示方式和具體顯示內(nèi)容七冲,但是只能在17及以上API中才能使用,相對是比較麻煩的规婆,不過市場上17以下的手機(jī)比重已經(jīng)非常低了,這個(gè)取舍就看公司項(xiàng)目的具體要求了