Settings -> Date and Time -> Use 24-hour format 을 Default로 설정하는 방법에 대해서 정리해 보았습니다.
일단 Use 24-hour format 기능은 onResume에서 아래와 같이 동작을 합니다.
@Override ... ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour()); ... } private boolean is24Hour() { return DateFormat.is24HourFormat(this); }
|
위의 소스를 보시면 is24HourFormat 함수를 통해서 24시간인지 아닌지를 Return해줍니다.
여기서 is24HourFormat 함수를 보면 다음과 같은데 여기서 Settings.System.TIME_12_24란 Key값을 가진 Systemproperty의 값을 받아오는 것을 확인 하실수 있습니다.
하지만 최초 부팅시 또는 초기화후 부팅시에는 value값이 존재하지 않음으로 null이 됩니다.
/** |
value 값이 null이므로 시스템으로 부터 Locale의 값을 가지고 와서 Time format을 확인한 후 value값이 12인지 24인지에 따라서 True or False를 리턴하게 됩니다.
Format의 확인 형식은 다음과 같습니다.
yyyy MM dd HH:mm : 24시간을 표시 yyyy MM dd hh:mm a : 12시간을 표시 |
여기서 "h"란 pattern을 확인 한 후 시간을 구분하게 됩니다.
하지만 여기서 한가지 의문이 생기게 됩니다.
왜 Locale을 불러오는지 말입니다.
그래서 확인한 결과 각각의 나라별 시간 표시 형식이 구분되어 있기 때문에 Locale을 사용하는 것을 확인하였습니다.
예를 들면 en_US같은 경우는 12시간을 표시하고, de_DE 같은 경우는 24시간을 표시하게 됩니다.
그래서 Locale을 사용하게 되는 것입니다.
그리고 시간의 패턴을 표시하기 위해서는 is24HourFormat 란 함수를 사용하여 확인한 후 12시간을 표시할 것인지 24시간을 표시할 것인지를 소스상에서
구분하는 것을 확인 하실수 있을것입니다.
여기까지가 24시간인지 아닌지를 체크하는 프로세스입니다.
그러면 이제 Locale을 변경을 해야되는데 이 값의 변경은 보통 SetupWizard에서 처리를 해줍니다.
하지만 SetupWizard가 없을 경우에는 Default Locale로 설정을 해주는데, 이 값은 다음과 같은 경로의 MakeFile에서 설정을 해줍니다.
Android\device\samsung\YP-GS1\Product.mk Android\device\samsung\YP-GS1\full_YP-GS1.mk |
이 파일을 열어보면, 여러 설정들이 존재하는데 그 중에서 다음과 같은 부분을 확인 할 수 있습니다.
# Overrides PRODUCT_MANUFACTURER:=samsung PRODUCT_BRAND:=samsung PRODUCT_NAME:=YP-GS1 PRODUCT_DEVICE:=YP-GS1 PRODUCT_LOCALES := en_GB \ en_US en_AU en_IE en_NZ en_ZA \ de_AT de_CH de_DE \ fr_FR fr_CH \ it_IT \ es_ES \ es_US \ nl_NL \ pt_PT \ pl_PL \ tr_TR \ ko_KR \ ru_RU \ bg_BG hr_HR cs_CZ da_DK nl_BE et_EE fi_FI el_GR \ hu_HU is_IS ga_IE kk_KZ lv_LV lt_LT mk_MK no_NO \ pt_PT ro_RO sr_RS sk_SK sl_SI sv_SE uk_UA |
여기서 Product_locales부분을 확인 할 수 있는데 여기의 첫번째 값이 en_GB이냐 ko_KR이냐에 따라 최초 부팅시 Locale의 값이 바뀌게 됩니다.
그래서 만약 영국식 영어로 설정하고 싶을 경우에는 위와 같이 en_GB를 첫번째로 넣으시면 됩니다.
Locale Default 24 hour을 설정하는 방법은 다음과 같습니다.
Android/external/ICU4C/data/locales/en_GB.txt를 열어보면 다음과 같습니다.
// ***************************************************************************
// * // * Copyright (C) 2007 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java // * Source File:<path>/common/main/en_GB.xml // * // *************************************************************************** en_GB{ NumberPatterns{ "#,##0.###", "¤#,##0.00", "#,##0%", "#E0", } Version{"1.54"} calendar{ gregorian{ DateTimePatterns{ "HH:mm:ss v", "HH:mm:ss z", "HH:mm:ss", "HH:mm", "EEEE, d MMMM yyyy", "d MMMM yyyy", "d MMM yyyy", "dd/MM/yyyy", "{1} {0}", } } } delimiters{ alternateQuotationEnd{"”"} alternateQuotationStart{"“"} quotationEnd{"’"} quotationStart{"‘"} } zoneStrings{ "meta:Europe_Central"{ cu:int{1} } "meta:Europe_Eastern"{ cu:int{1} } "meta:Europe_Western"{ cu:int{1} } } }
여기서 gregorian영역안에서 Format에 해당하는 부분들을 추가해야 합니다.
예를 들면, dayNames, monthNames, quarters 등을 추가하여야 하며, 이를 적용한 부분의 예는 다음과 같습니다.
// ***************************************************************************
// * // * Copyright (C) 2007 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java // * Source File:<path>/common/main/en_GB.xml // * // *************************************************************************** en_GB{ NumberPatterns{ "#,##0.###", "¤#,##0.00", "#,##0%", "#E0", } Version{"1.54"} calendar{ gregorian{ DateTimePatterns{ "HH:mm:ss v", "HH:mm:ss z", "HH:mm:ss", "HH:mm", "EEEE, d MMMM yyyy", "d MMMM yyyy", "d MMM yyyy", "dd/MM/yyyy", "{1} {0}", }
dayNames{ format{ abbreviated{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", } wide{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", } } stand-alone{ narrow{ "S", "M", "T", "W", "T", "F", "S", } } }
monthNames{ format{ abbreviated{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", } wide{ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", } } stand-alone{ narrow{ "J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D", } } } quarters{ format{ abbreviated{ "Q1", "Q2", "Q3", "Q4", } wide{ "1st quarter", "2nd quarter", "3rd quarter", "4th quarter", } } stand-alone{ narrow{ "1", "2", "3", "4", } } } } } delimiters{ alternateQuotationEnd{"”"} alternateQuotationStart{"“"} quotationEnd{"’"} quotationStart{"‘"} } zoneStrings{ "meta:Europe_Central"{ cu:int{1} } "meta:Europe_Eastern"{ cu:int{1} } "meta:Europe_Western"{ cu:int{1} } } }
gregorian 영역안에 Format 영역을 추가 한 후 icudt44l.dat 파일을 생성한 후 stubdata 폴더에 복사하면 됩니다.
'안드로이드' 카테고리의 다른 글
ICU4C 빌드 방법. (0) | 2011.06.22 |
---|---|
Time Zone 수정 방법. (0) | 2011.06.22 |
안드로이드 OS의 기본언어(locale) 설정하기 (0) | 2011.06.15 |
Locale에 따른 시간 포멧 설정. (0) | 2011.06.15 |
PowerManager 사용시 유의점. (0) | 2011.06.13 |