「getFormat12Hour()」:返回12小时制的格式。
「getFormat24Hour()」:返回24小时制的格式。
「getTimeZone()」:指示此视图当前使用的时区。
「is24HourModeEnabled()」:指**「系统」**当前是否使用 24 小时模式。
「onVisibilityAggregated(Boolean isVisible:)」:当此视图的用户可见性可能受到此视图本身、祖先视图或此视图附加到的窗口的更改的影响时调用。
「refreshTime()」:如有必要,更新显示的时间并使视图无效(在API 30中添加)。
示例
–
看上面介绍十分简单,咱们还是搞个实例了解一下吧,先看效果图。
主界面布局文件android:orientation=“vertical” android:layout_width=“match_parent” android:layout_margin="@dimen/dimen_20" android:layout_height=“match_parent”> android:id="@+id/tv_is24HourModeEnabled" android:layout_width=“match_parent” andro id:layout_height=“wrap_content” android:layout_marginTop="@dimen/dimen_10" android:textSize="@dimen/text_size_16" android:padding="@dimen/dimen_10"/> android:id="@+id/tc_timeText_12" android:layout_width=“match_parent” android:layout_height=“wrap_content” android:gravity=“center” android:textColor="@color/black" android:textSize=“30sp” android:textStyle=“bold”/> android:id="@+id/tc_dateText_12" android:layout_width=“match_parent” android:layout_height=“wrap_content” android:gravity=“center” android:textColor="@color/black" android:textSize=“20sp”/> android:id="@+id/tv_12hour" android:layout_width=“match_parent” android:layout_height=“wrap_content” android:layout_marginTop="@dimen/dimen_10" android:textSize="@dimen/text_size_16" android:padding="@dimen/dimen_10"/> android:id="@+id/tc_timeText_24" android:layout_width=“match_parent” android:layout_height=“wrap_content” android:layout_marginTop="@dimen/dimen_20" android:format12Hour=“hh:mm:ss” android:format24Hour=“HH:mm:ss” android:gravity=“center” android:textColor="@color/black" android:textSize=“30sp” android:textStyle=“bold”/> android:id="@+id/tc_dateText_24" android:layout_width=“match_parent” android:layout_height=“wrap_content” android:format12Hour=“yyyy/MM/dd E” android:format24Hour=“yyyy/MM/dd E” android:gravity=“center” android:textColor="@color/black" android:textSize=“20sp”/> android:id="@+id/tv_24hour" android:layout_width=“match_parent” android:layout_height=“wrap_content” android:layout_marginTop="@dimen/dimen_10" android:textSize="@dimen/text_size_16" android:padding="@dimen/dimen_10"/> public class TextClockActivity extends AppCompatActivity { private TextClock tc_timeText_12,tc_dateText_12,tc_timeText_24,tc_dateText_24; private TextView tv_12hour,tv_24hour,tv_is24HourModeEnabled; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_textview_textclock);//加载布局文件 initView(); } private void initView() { tv_is24HourModeEnabled = findViewById(R.id.tv_is24HourModeEnabled); tc_timeText_12 = findViewById(R.id.tc_timeText_12); tc_dateText_12 = findViewById(R.id.tc_dateText_12); tv_12hour = findViewById(R.id.tv_12hour); //setTimeZone使用(UTC-7)无效, //原因:源码未对UTC+(-)进行处理,下面有具体的源码分析 tc_timeText_12.setTimeZone(“America/Los_Angeles”);//有效 tc_dateText_12.setTimeZone(“America/Los_Angeles”);//有效 //tc_timeText_12.setTimeZone(“GMT+7:00”);//有效 //tc_dateText_12.setTimeZone(“GMT+7:00”);//有效 tc_dateText_12.setFormat24Hour(“HH:mm”); tc_dateText_12.setFormat12Hour(“yyyy/MM/dd E”); // EEEE:星期五 ;E/EE/EEE:周五;a:上午/下午 tc_dateText_12.setFormat24Hour(“yyyy年MM月dd日 EEEE aa HH:mm:ss”); String format12 = “n12小时模式格式:”+tc_timeText_12.getFormat12Hour(); format12 = format12+"n24小时模式格式:"+tc_timeText_12.getFormat24Hour(); format12 = format12+"n时区:"+tc_timeText_12.getTimeZone(); tv_12hour.setText(“Format:”+format12); tc_timeText_24 = findViewById(R.id.tc_timeText_24); tc_dateText_24 = findViewById(R.id.tc_dateText_24); tv_24hour = findViewById(R.id.tv_24hour); String format = “n24小时模式格式:”+tc_timeText_24.getFormat24Hour(); format = format+"n12小时模式格式:"+tc_timeText_24.getFormat12Hour(); format = format+"n时区:"+tc_timeText_24.getTimeZone(); String timeZome =TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT); format = format+"n时区:"+timeZome; tv_24hour.setText(“Format:”+format); String is24HourMode = String.format(“系统当前是否使用 24 小时模式:%s。”, tc_dateText_24.is24HourModeEnabled()); tv_is24HourModeEnabled.setText(is24HourMode); } } 手机系统默认是24小时格式 例一的时间/日期显示格式在代码中设置; 例一的12小时制格式返回:「ah:mm」 这个是默认值。 例二的时间/日期显示格式在xml文件中设置; 例二未设置时区所以时区返回null,可通过下面代码获取系统时区来显示 TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT); 源码分析 public void setFormat12Hour(CharSequence format) { mFormat12 = format; chooseFormat(); onTimeChanged(); } public void setFormat24Hour(CharSequence format) { mFormat24 = format; chooseFormat(); onTimeChanged(); } 看完**「setFormat12Hour」和「setFormat24Hour」,你会发现他们除了各自格式赋值,后面都调用了「chooseFormat()」** 和**「onTimeChanged()」**,下面咱看看这俩方法是干什么的。 先进行了判断是不是24小时制,后面用到了**「abc()」**;mDescFormat12,mDescFormat24用于内容描述,下面讲到。咱们接着往下看abc() private void chooseFormat() { final boolean format24Requested = is24HourModeEnabled(); LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale); if (format24Requested) { mFormat = abc(mFormat24, mFormat12, ld.timeFormat_Hm); mDescFormat = abc(mDescFormat24, mDescFormat12, mFormat); } else { mFormat = abc(mFormat12, mFormat24, ld.timeFormat_hm); mDescFormat = abc(mDescFormat12, mDescFormat24, mFormat); } boolean hadSeconds = mHasSeconds; mHasSeconds = DateFormat.hasSeconds(mFormat); if (mShouldRunTicker && hadSeconds != mHasSeconds) { if (hadSeconds) getHandler().removeCallbacks(mTicker); else mTicker.run(); } } a不为null,返回a;否则继续往下看; b不为null,返回b;否则返回c; 例如:24小时制:a=24小时格式;b=12小时格式,c默认格式 说白了就是上面的:「如何格式化日期和时间的规则。」 private static CharSequence abc(CharSequence a, CharSequence b, CharSequence c) { return a == null ? (b == null ? c : b) : a; } 获取系统当前时间并展示。这里多了一个**「setContentDescription()」**;咱后面看看是干嘛的 @UnsupportedAppUsage private void onTimeChanged() { mTime.setTimeInMillis(System.currentTimeMillis()); setText(DateFormat.format(mFormat, mTime)); setContentDescription(DateFormat.format(mDescFormat, mTime)); } 设置 控件 的内容描述。 @RemotableViewMethod public void setContentDescription(CharSequence contentDescription) { //mContentDescription:简要描述视图,主要用于辅助功能支持。 if (mContentDescription == null) { if (contentDescription == null) { return; } } else if (mContentDescription.equals(contentDescription)) { return; } mContentDescription = contentDescription; final boolean nonEmptyDesc = contentDescription != null && contentDescription.length() > 0; if (nonEmptyDesc && getimportantForAccessibility() == importANT_FOR_ACCESSIBILITY_AUTO) { setimportantForAccessibility(importANT_FOR_ACCESSIBILITY_YES); notifySubtreeAccessibilityStateChangedIfNeeded(); } else { notifyViewAccessibilityStateChangedIfNeeded( AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DEscriptION); } } 设置时区 public void setTimeZone(String timeZone) { mTimeZone = timeZone; createTime(timeZone); onTimeChanged();《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
setFormat12Hour()



