您的位置:首页 > 其它

settings/Date&time/Choose date format中增加自己定义的日期格式

2016-09-18 16:03 751 查看
settings/Date&time/Choose date format中增加自己定义的日期格式

  问题分析:在Choose date format中增加日期格式,增加后的日期格式要在开机桌面中进行显示,增加的日期格式要能被程序识别并进行显示。

  思路:V2800原来的日期格式为:Regional(12/31/2016)、12/31/2016、31/12/2016、2016/12/31、Sat,Dec 31,2016、Sat,31 Dec 2016这几种格式,把格式改为:Regional(12/31/2016)、12-31-2016、31-12-2016、2016-12-31、Sat,Dec 31,2016、Sat,31 Dec 2016。首先在String.xml中找到Choose date format字段,然后利用source insight对字段进行搜索找到Date_time_prefs.xml文件(找到小标题Summary字段修改为MM-dd-yyyy样式),然后对Date_time_prefs.xml文件进行搜索找到DateTimeSettings.java文件(要修改的目标文件找到)。代码中找到所有的pattern,对模型进行SimpleDateFormat进行格式化,格式化为想要的格式。

  目的:带着问题去学习,起到熟悉工作代码的作用。

  DateTimeSettings分析:

  DateTimeSettings继承了SettingsPreferenceFragment类,那么在类中主要使用了ListPreference来作为日期的显示。

  OnCreate()中addPreferencesFromResource(R.xml.date_time_prefs)加载搜索到的资源文件xml.date_time_prefs,然后调用initUI()。

  initUI()中:autoTimeEnabled和autoTimeZoneEnabled查看是否是自动时间设置,自动的日期设置,autoTimeEnabled又分为了三种方式:Use network-provided time、Use-GPS-provided time、Off,然后如果选择不同的方式则进行不同的处理。如果autoTimeZoneEnabled打开表示可以手动选择当前的时区。然后通过findPreference()找到time、24 hour、timezone、date字段,设置相应的值进去,mDateFormat中设置的资源文件的值为date_format_values,利用source
insight搜索,找到Array.xml文件,在这里找到了显示的日期格式字段。

<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>

        <item>yyyy-MMM-d</item>

        <item>yyyy-d-MMM</item>

        <item>EEEE-MMMM-d</item>

要添加格式在这里添加,修改格式也是对这里进行修改,修改后要能在手机的主界面显示出来。

onResume():设置IntentFilter,注册BroadcastReceiver(),当时间日期发生改变时触发。调用updateTimeAndDateDisplay (),显示时间和日期格式。

updateTimeAndDateDisplay():功能是DateFormat对日期、时间、时区、是否24小时制进行格式化,并且在小标题上显示出日期、时间、时区、是否24小时制。

onDateSet():设置日期的格式,对日期进行设置后调用updateTimeAndDateDisplay()、updateDateFormatEntries()这两个方法。

updateDateFormatEntries():对Array.xml文件中添加的日期格式进行格式化。首先加载资源文件date_format_values.xml,然后把找到的日期格式放入数组中,对MM-dd-yyyy、dd-MM-yyyy、yyyy-MM-dd、yyyy-MMM-d、yyyy-d-MMM、EEEE-MMMM-d利用SimpleDateFormat进行格式化,其余格式利用DateFormat进行格式化显示,编译通过。能够显示出“横线”的形式。

onSharedPreferenceChanged():主要是对桌面文件如何显示进行设置的format文件获得Array.xml中的所有的格式,当format为MM-dd-yyyy、dd-MM-yyyy、yyyy-MM-dd时SimpleDateFormat对其进行格式化,然后显示在屏幕桌面上。完成。

另一种分析思路:

在frameworks/base/core/java/android/text/format/dateformat.java中getDateFormat()得到Value并把value值传给getDateFormatForSetting()。

getDateFormatForSetting()中对格式进行了设置,value中存在dd则用dd,不存在的话使用d,MMMM存在则为MMMM,不存在则判断MMM是否存在,存在则为MMM,不存在判断MM是否存在,一直到M为止,yyyy,EEEE值依次类推。然后对得到的day、year、month、week进行格式化。

frameworks/base/package/keyguard/src/com/android/keyguard/keyguardStatusView.java中对于得到的pattern模式进行处理。

   MM-dd-yyyy处理为:MM/dd/yyyy、dd-MM-yyyy处理为dd/MM/yyyy、yyyy-MM-dd处理为yyyy/MM/dd、EE-MMM-d-yyyy处理为EE,MMM d yyyy,EE-d-MMM-yyyy处理为EE,d MMM yyyy,yyyy-MMM- d-EE处理为yyyy、MMM d EE,EEEE-MMMM-d处理为EEEE,MMMM d。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐