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

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。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值