Android: Как изменить формат даты представления DatePicker с MM / dd / yyyy на dd / MM / yyyy?

Я давно пытаюсь получить ответ на этот вопрос. Я также просмотрел следующую ссылку: Android - формат виджета DatePicker. На моем телефоне / эмуляторе (v 2.3.3) виджет DatePicker и диалоговое окно не поддерживают формат даты, указанный в настройках (Настройки-> Дата и время-> Выбрать формат даты). Они всегда в формате «ММ / дд / гггг». Языковой стандарт установлен на английский, Великобритания.

Я получаю "d / MM / yyyy", когда читаю настройки с помощью:

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

Кто-нибудь знает, как изменить формат даты в представлении DatePicker?


person Ovid    schedule 26.08.2011    source источник


Ответы (2)


Чтобы переопределить формат DatePicker, лучше всего было бы переопределить один из его конструкторов с небольшим изменением исходного кода. Вы можете редактировать ViewGroup в коде за вас, но я бы серьезно подумал о том, чтобы не делать этого таким образом.

  1. Создать класс LocalizedDatePicker
  2. Переопределить общедоступный DatePicker (контекст контекста, AttributeSet attrs, int defStyle) http://developer.android.com/reference/android/widget/DatePicker.html#DatePicker(android.content.Context, android.util.AttributeSet, int)
  3. Скопируйте код из исходного DatePicker конструктор (может потребоваться выбрать другую ветку после некоторого тестирования, я связал голову)
  4. Переопределите методы, вызывающие reorderSpinners (), чтобы удалить этот вызов.
  5. Заменить строку inflater.inflate(R.layout.date_picker, this, true); на inflater.inflate(my.package.R.layout.localized_date_picker, this, true);
  6. Скопируйте исходный макет date_picker.xml на свой локальный ресурс localized_date_picker.xml
  7. Отредактируйте файл в желаемом порядке, так как вы его редактируете, пожалуйста, соблюдайте локализацию других мест и сохраните копию оригинала в своей глобальной папке макета и поместите localized_date_picker.xml в папку для вашего региона. Так как в системе используется схема «Месяц, день, год», люди в других местах могут ожидать этого порядка.
person Dan S    schedule 26.08.2011
comment
Большое спасибо за исчерпывающий ответ. Жалко, что так много нужно сделать для того, что кажется ошибкой в ​​локали En UK (см. Дата и время в Великобритании). Я полагаю, что под номером 6 вы имеете в виду reorderPickers () вместо reorderDates ()? - person Ovid; 29.08.2011
comment
исходная ссылка конструктора DatePicker не работает - person Ravi K. Sharma; 09.06.2014
comment
@DanS Не могли бы вы уточнить, где находится reorderPickers ()? - person IntelliJ Amiya; 29.07.2015
comment
@IntelliJAmiya Метод переименован в reorderSpinners () - person Dan S; 30.07.2015

Этот параметр очень специфичен. Он предназначен только для применения к датам, указанным в «кратком формате». Пока вы используете что-то еще (в этом случае DatePicker, похоже, использует «средний»), эти настройки не будут приниматься во внимание, и форматирование по умолчанию для локали вступит во владение.

Я могу подтвердить, что если вы измените язык своего телефона (и, по сути, языковой стандарт), порядок элементов изменится в средстве выбора даты. Что, как я полагаю, означает, что я не согласен с утверждением Дэна С. о том, что «система не использует какой-либо механизм для локализации DatePicker». Если вы посмотрите на код, вы увидите, что (по крайней мере, начиная с версии 2.1) существует reorderPickers (), который делает именно это.

Английский: Английский

Французский: French

person dmon    schedule 26.08.2011
comment
Спасибо за ответ, теперь я понимаю, как это работает. Забавно, что date_picker.xml, кажется, противоречит этому поведению: Предупреждение: все в родительском элементе удаляется и переупорядочивается в зависимости от формата даты, выбранного пользователем. В любом случае, поскольку кажется, что текущий языковой стандарт для использования, это означает для меня, что формат даты по умолчанию в локали En UK (мм / дд / гггг) неверен, поскольку он должен быть дд / мм / гггг: Дата и время в Соединенном Королевстве. - person Ovid; 29.08.2011
comment
@Ovid English в контексте Америки .. и есть много неправильных реализаций в платформе Android, связанных с локализацией .. - person Tobrun; 10.07.2014