2011-08-26 11 views
8

Próbuję uzyskać odpowiedź na to pytanie od dłuższego czasu. Spojrzałem również na następujący link: Android - DatePicker Widget Format. Na moim telefonie/emulatorze (v 2.3.3) zarówno widżet DatePicker, jak i okno dialogowe nie przyjmują formatu daty określonego w ustawieniach (Ustawienia-> Data & Czas-> Wybierz format daty). Są zawsze w formacie "MM/dd/rrrr". Ustawienie narodowe jest ustawione na angielski w Wielkiej Brytanii.Android: Jak zmienić format daty widoku DataPicker z MM/dd/rrrr na dd/MM/rrrr?

otrzymuję „d/mm/rrrr”, gdy czytam ustawienia z:

Settings.System.getString(getContentResolver(), Settings.System.DATE_FORMAT);

Czy ktoś ma pomysł o tym, jak zmienić format daty w widoku DatePicker?

Odpowiedz

12

Aby przesłonić format DatePicker, najlepiej byłoby przesłonić jednego z konstruktorów niewielką zmianą do oryginalnego kodu. Możesz edytować grupę ViewGroup w swoim kodzie, ale poważnie zastanawiałbym się, czy nie zrobić tego w ten sposób.

  1. Tworzenie klasy LocalizedDatePicker
  2. Zastąp public DatePicker (Context context, AttributeSet attrs, int defStyle)http://developer.android.com/reference/android/widget/DatePicker.html#DatePicker(android.content.Context, android.util.AttributeSet, int)
  3. skopiować kod z original DatePicker constructor (być może trzeba wybrać inną gałąź po pewnym badania, mam związane The head)
  4. Zastąp metody, które wywołują reorderSpinners(), aby usunąć to połączenie.
  5. Zamień linię inflater.inflate(R.layout.date_picker, this, true); z inflater.inflate(my.package.R.layout.localized_date_picker, this, true);
  6. skopiować oryginalny układ date_picker.xml do lokalnego localized_date_picker.xml zasobów
  7. edytować plik do żądanej kolejności, ponieważ jesteś edycji tego należy przestrzegać lokalizację i innych miejscach zachowaj kopię oryginału w folderze układu globalnego i umieść plik localized_date_picker.xml w określonym folderze regionu. Ponieważ układ systemu jest miesiącem roku, ludzie w innych miejscach mogą spodziewać się tego zamówienia.
+0

dziękuję za kompleksową odpowiedź. Szkoda, że ​​tak wiele trzeba zrobić w przypadku czegoś, co wydaje się być błędem w locie w Wielkiej Brytanii (patrz [notacja daty i czasu w Wielkiej Brytanii] (http://en.wikipedia.org/wiki/Data_and_time_notation_in_the_United_Kingdom)). Przypuszczam, że na nr 6 masz na myśli reorderPickers() zamiast reorderDates()? – Ovid

+0

oops, tak, korekta zostanie wkrótce opublikowana. –

+0

oryginalny link konstruktora DatePicker jest uszkodzony –

3

To ustawienie ma wartość , w szczególności dotyczy to określonego. Ma on zastosowanie tylko do dat pokazanych w "krótkim formacie". Dopóki używasz czegoś innego (w tym przypadku DatePicker wydaje się używać "medium"), ustawienia te zostaną zignorowane, a domyślne formatowanie regionalne zostanie przejęte.

Mogę potwierdzić, że jeśli zmienisz telefon w tym języku (i, w praktyce, w Locale), kolejność elementów zmienia się w selektorze daty o. Co chyba oznacza, że ​​nie zgadzam się z twierdzeniem Dana S, że "system nie używa żadnego mechanizmu do lokalizacji DatePicker". Jeśli spojrzysz na kod, możesz to zobaczyć (przynajmniej od 2.1), jest tam metoda reorderPickers(), która robi dokładnie to.

angielski: English

francuski: French

+0

dmon, dzięki za poprawkę. –

+2

Dzięki za odpowiedź, rozumiem teraz, jak to działa. To zabawne, że plik date_picker.xml wydaje się zaprzeczać temu zachowaniu: _Ostrzeżenie: wszystko wewnątrz rodzica jest usuwane i ponownie zamawiane w zależności od formatu daty wybranego przez użytkownika. W każdym razie, ponieważ obecne ustawienia regionalne wydają się być używane, to znaczy dla mnie domyślny format daty w języku angielskim w Wielkiej Brytanii (mm/dd/rrrr) jest błędny, ponieważ powinien to być dd/mm/rrrr: [Notacja daty i godziny w Wielkiej Brytanii] (http: //en.wikipedia. org/wiki/Date_and_time_notation_in_the_United_Kingdom). – Ovid

+0

@Ovid English w kontekście Ameryki .. i istnieje wiele błędnych implementacji w systemie Android związanych z lokalizacją .. – Tobrun