Исправлено появление облегченного средства выбора даты с кодовым именем One

#codenameone

#codenameone

Вопрос:

Одно и то же средство выбора с кодовым именем One lightweight отображается следующими двумя способами (разница в «01/01/00» на Android и «01/01/2000» на iPhone).

Android
cod

iPhone
введите описание изображения здесь

Мне нужно исправить две проблемы с внешним видом. Первое — это дата: «01/01/00» плохо, «01/01/2000» лучше, «1 gennaio 2000» (локализовано на итальянском языке) — это то, что я предпочитаю в обеих ОС.

Второе — это внутренняя компоновка средства выбора: на скриншоте iPhone вы можете видеть, что средство выбора даты не центрировано, а выровнено по левому краю. Лучше, если оно выровнено по центру в обеих ОС. Та же проблема на Android, но она менее заметна (в данном случае).

Комментарии:

1. Пожалуйста, не добавляйте снимок экрана. Добавьте код здесь. Это помогло бы другим отлаживать и предоставлять ответ.

2. Вы понизили голос из-за этого? Код для облегченного средства выбора Codename One тривиален для обоих скриншотов, поэтому я его не добавлял. Это что-то вроде: Picker datePicker = new Picker(); datePicker.setType(Display.PICKER_TYPE_DATE); datePicker.setUseLightweightPopup(true);

3. используете ли вы менеджер локализации?

4. SimpleDateFormat SimpleDateFormat = новый SimpleDateFormat(«дд/ ММ/гггг»); Строка dateString = SimpleDateFormat.format(новая дата());

5. Спасибо, но SimpleDateFormat устарел: codenameone.com/javadoc/java/text/SimpleDateFormat.html Что касается менеджера локализации, я использую локализацию по умолчанию, предоставляемую Codename One . Это API средства выбора, которое я использую, в нем нет упоминания о том, как локализовать дату, отображаемую средством выбора: codenameone.com/javadoc/com/codename1/ui/spinner/Picker.html

Ответ №1:

Форматирование даты можно настроить с помощью:

  picker.setFormatter(mySimpleDateFormat);
  

Это должно позволить вам явно определить форматирование. По умолчанию используются настройки вашего устройства, что объясняет разницу между ними.

Обратите внимание, что вы должны использовать com.codename1.l10n.SimpleDateFormat не java.text версию.

Что касается центрирования, я не уверен, возможно ли это. Это также было проблемой для встроенного средства выбора в iOS. Вы можете подать запрос на RFE по этому поводу, и мы можем попробовать.

Ответ №2:

Возможно, другой шанс — это что-то вроде следующего, для максимальной настройки:

 Picker value = new Picker() {
    @Override
    protected void updateValue() {
        if (getDate() == null) {
            setText(" ");
            return;
        }
        setText(L10NManager.getInstance().formatDateLongStyle(getDate()));
    }
};