2016-06-05 2 views
1

Когда установлено начальное время, установленное после 12 часов, значение на дисплее и селектор совпадают. Когда он установлен до 12 часов, дисплей на один час больше, чем показывает селектор (что является правильным значением).Что могло бы вызвать «выбор времени» для выбора часа в другом селекторе

Что мне нужно сделать по-другому?

Спасибо.

+0

Как вы делаете это в коде? Какой у вас часовой пояс? На каком типе устройства/версии ОС? –

+0

Строка text = "09:30"; // 24-часовой формат или «21:30» для pm int iHour = Integer.valueOf (text.substring (0, 2)); int iMinute = Integer.valueOf (text.substring (3, 5)); picker.setTime (iHour, iMinute); Android, часовой пояс не учитывается. –

+0

Временная зона может быть причиной несоответствия между версией native и Codename One. Я предполагаю, что 9:30 отображается правильно в пользовательском интерфейсе, но когда вы нажимаете кнопку на устройстве, появляется часовое пользовательский интерфейс? Какая версия Android? Вы пытались использовать более одного устройства? –

ответ

1
Toolbar.setGlobalToolbar(true); 
Form hi = new Form("Picker", BoxLayout.y()); 
String text = "09:30"; 
// 24 hour format or "21:30" for pm 
int iHour = Integer.valueOf(text.substring(0, 2)); 
int iMinute = Integer.valueOf(text.substring(3, 5)); 
Picker picker= new Picker(); 
picker.setType(Display.PICKER_TYPE_TIME); 
picker.setTime(iHour, iMinute);   
hi.add(picker); 
hi.show(); 

enter image description here

+0

Единственная разница в том, что у меня есть picker.setShowMeridiem (true); Думаю, это должно быть ложным. –

+0

Я установил setShowMeridiem в false, и получаю то, что вы получаете, но 21:30 показывает, как 21:30. –

+0

Когда setShowMeridiem истинно, селектор (прокручиваемое колесо) показывает 9:30, но текстовый дисплей на экране показывает 10:30 утра. Я бы разместить снимки экрана, но я не знаю, как добавить их к комментариям –

1
Changing Picker.java line 326 
original: setText(twoDigits(hour % 13 + 1) + ":" + twoDigits(minute) + text); 
solution: setText(twoDigits(hour <= 12 ? hour : hour - 12) + ":" + twoDigits(minute) + text); 

fixes the showMeridiem problem for am hours. 
+0

Благодаря мы исправим это в следующем обновлении. –

0
// This is a work around to the problem 

picker = new Picker() { 

    protected String twoDigits(int i) { 
     if(i < 10) { 
      return "0" + i; 
     } 
     return "" + i; 
    } 

    @Override 
    protected void updateValue() { 
     if (getFormatter() != null) { 
      setText(getFormatter().format(getDate())); 
      return; 
     } 
     switch (pickerType) { 
      case Display.PICKER_TYPE_STRINGS: 
       setText(getSelectedString()); 
       break; 
      case Display.PICKER_TYPE_DATE: 
       setText(L10NManager.getInstance().formatDateShortStyle(getDate())); 
       break; 
      case Display.PICKER_TYPE_TIME: 
       try { 
        int v = getTime(); 
        int hour = v/60; 
        int minute = v % 60; 
        if (showMeridiem) { 
         String text; 
         if (hour >= 12) { 
          text = "pm"; 
         } else { 
          text = "am"; 
         } 
         setText(twoDigits(hour <= 12 ? hour : hour - 12, 2) + ":" + twoDigits(minute) + text)); 
        } else { 
         setText(twoDigits(hour) + ":" + twoDigits(minute)); 
        } 
       } catch (Exception e) { 
       } 
       break; 
      case Display.PICKER_TYPE_DATE_AND_TIME: 
       setText(L10NManager.getInstance().formatDateTimeShort(getDate())); 
       break; 
      } 
     } 
    }; 
} 
Смежные вопросы