Android Setting下修改時間與日期格式的問題???

wjky2014發表於2014-02-12

          最近一直在頭疼怎樣在修改Settings-----Date&Time---Choose data format 後通知更新桌面時鐘 AppWidget的日期格式跟著Setting的改變而改變...

想實現的效果就是如下:

原先日期格式是這樣

當點選修改Settings-----Date&Time---Choose data format,

想動態實現,就有點不知道怎麼解決了,

這個佈局其實是一個TextClock 

          <TextClock
            android:id="@+id/date"
            style="@style/label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:format12Hour="@string/abbrev_wday_month_day_no_year"
            android:format24Hour="@string/abbrev_wday_month_day_no_year"
            android:gravity="center"
            android:textColor="@color/clock_white" />


 android:format12Hour="@string/abbrev_wday_month_day_no_year"這個用到的一個佈局如下

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
     
-->

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- 字串匹配的鎖定螢幕顯示日期的格式. MM/dd/yyy-->
    <string name="abbrev_wday_month_day_no_year">dd-MM-yyyy</string>
    <!-- Format for describing the date, for accessibility. -->
    <string name="full_wday_month_day_no_year">EEEE, MMMM d</string>
    <!-- Default clock style. -->
    <string name="default_clock_style">digital</string>
</resources>

第一種解決方法,屬於治標不治本的方法,這種方法是靜態修改abbrev_wday_month_day_no_year的值為想要的日期格式,

比如修改為:<string name="abbrev_wday_month_day_no_year">EE-d-MMM-yyyy</string>

這個有點不靠譜,或者修改為如下格式

日期格式的值的方法有如下:

  <string-array name="date_format_values" translatable="false">
        <!-- The blank item means to use whatever the locale calls for. -->
        <item></item>
        <item>MM-dd-yyyy</item>
        <item>dd-MM-yyyy</item>
        <item>yyyy-MM-dd</item>
        <item>EE-MMM-d-yyyy</item>
        <item>EE-d-MMM-yyyy</item>
        <item>yyyy-MMM-d-EE</item>
    </string-array>

老大給的建議讓用TextView代替TextClock,可是自己水平有限重寫的幾次都沒達到理想的效果。。。。


用Textview簡單實現的方法如下:

		/**
		 * 第一步
		 * 獲取settings中日期的格式
		 * strTimeFormat的字串是    yyyy-MM-dd
		 * 
		 * 第二步
		 * SimpleDateFormat 是一個以國別敏感的方式格式化和分析資料的具體類。 
		 * 它允許格式化 (date -> text)、語法分析 (text -> date)和標準化。
		 * 根據日期格式顯示不同型別的日期
		 * 
		 * ***/ 
		ContentResolver cv = this.getContentResolver();
		String strTimeFormat = android.provider.Settings.System.getString(cv,
				android.provider.Settings.System.DATE_FORMAT);
		System.out.println("選擇 Normal (2014-12-31)" + strTimeFormat);

		SimpleDateFormat dateFormatter = new SimpleDateFormat(strTimeFormat);
		time = dateFormatter.format(Calendar.getInstance().getTime());
		textView.setText(time);
實現的效果如下:

日期格式時間跟著設定裡面的改變而改變..




網上收到的一些方法有如下,自己是小菜鳥一枚,看了好久還是沒有解決掉這個問題,希望有大神能夠幫助一下...





相關文章