Статьи

Дизайн пользовательского интерфейса Android: работа с диалогами выбора даты

Люди форматируют информацию о дате различными способами, и это делает сбор необработанной информации о дате от пользователей немного сложным. Лучший способ гарантировать действительные данные — предоставить элемент управления, который обеспечивает соблюдение определенных правил форматирования даты. Один из способов сделать это — использовать специальный диалог для сбора данных.

Диалоги даты, такие как показано ниже, создаются из специального класса AlertDialog с именем DatePickerDialog (android.app.DatePickerDialog). В дополнение к наличию всех функций класса AlertDialog вы можете использовать DatePickerDialog для сбора стандартизированного ввода даты от пользователя. В этом кратком руководстве мы предоставляем шаги, необходимые для реализации диалогового окна выбора даты для сбора даты (например, дня рождения) от пользователя.

DatePickerDialog

Мы уже обсуждали, как добавить базовые диалоговые элементы управления в ваши классы Activity. Этот краткий учебник основан на ваших знаниях из учебника Учебник по разработке пользовательского интерфейса Android: работа с диалогами . Вы можете добавить это диалоговое окно в пример приложения диалога, представленного в вышеупомянутом руководстве, или создать свое собственное приложение.

Теперь давайте добавим еще один новый диалог в ваш базовый класс Activity.

Отредактируйте ваш класс Java Activity и добавьте следующие переменные-члены:

Этот код определяет уникальный идентификатор Dialog для нашего класса Activity. Значение является произвольным, но должно быть уникальным в Деятельности.

Чтобы создать экземпляры Dialog, вы должны предоставить регистр для вашего DatePickerDialog в методе onCreateDialog () вашего класса Activity. Когда вызывается метод showDialog (), он инициирует вызов этого метода, который должен вернуть соответствующий экземпляр Dialog. В примере кода у нас есть три различных диалога в нашем классе, и, таким образом, нам нужно проверить входящий идентификатор диалога, чтобы вернуть диалог соответствующего типа.

Конкретный оператор case для вашего нового DatePickerDialog в методе onCreateDialog () показан здесь:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
case MY_DATE_DIALOG_ID:
    DatePickerDialog dateDlg = new DatePickerDialog(this,
         new DatePickerDialog.OnDateSetListener() {
          
         public void onDateSet(DatePicker view, int year,
                                             int monthOfYear, int dayOfMonth)
         {
                    Time chosenDate = new Time();
                    chosenDate.set(dayOfMonth, monthOfYear, year);
                    long dtDob = chosenDate.toMillis(true);
                    CharSequence strDate = DateFormat.format(«MMMM dd, yyyy», dtDob);
                    Toast.makeText(SuperSimpleDialogsActivity.this,
                         «Date picked: » + strDate, Toast.LENGTH_SHORT).show();
        }}, 2011,0, 1);
             
      dateDlg.setMessage(«When’s Your Birthday?»);
      return dateDlg;

Здесь мы создаем новый экземпляр DatePickerDialog, настраиваем его и возвращаем. Конфигурация проста. Мы включили реализацию метода onDateSet (), который вызывается, когда пользователь выбирает конкретную дату и нажимает кнопку положительного диалога. Мы также установили сообщение диалогового окна, чтобы запросить у пользователя дату рождения.

Примечание. Мы используем класс Time (android.text.format.Time) и класс DateFormat (android.text.format.DateFormat) для преобразования между машиночитаемыми и удобочитаемыми форматами дат.

Напомним, что Activity сохраняет диалоги и использует их всякий раз, когда они отображаются. Поскольку мы хотим инициализировать DatePickerDialog до сегодняшней даты, мы должны инициализировать его в методе onPrepareDialog () в Activity. В противном случае при втором запуске DatePickerDialog будет установлена ​​дата, выбранная в предыдущий раз. Давайте предположим, что мы хотим повторно использовать это диалоговое окно, поэтому мы хотим сбрасывать его на текущую дату каждый раз, когда отображается диалоговое окно. Для этого мы должны обновить метод onPrepareDialog () в Activity. Вот инструкция для конкретного DatePickerDialog в этом методе:

01
02
03
04
05
06
07
08
09
10
11
case MY_DATE_DIALOG_ID:
     DatePickerDialog dateDlg = (DatePickerDialog) dialog;
     int iDay,iMonth,iYear;
 
     Calendar cal = Calendar.getInstance();
     iDay = cal.get(Calendar.DAY_OF_MONTH);
     iMonth = cal.get(Calendar.MONTH);
     iYear = cal.get(Calendar.YEAR);
     dateDlg.updateDate(iYear, iMonth, iDay);
      
     break;

Здесь мы используем класс Calendar (java.util.Calendar) для установки элемента управления DatePickerDialog на сегодняшнюю дату каждый раз, когда диалоговое окно отображается с помощью метода updateDate (). Обратите внимание, что значением месяца является номер месяца на основе 0 (т. Е. Октябрь будет 9-м, а не 10-м).

Наконец, вы готовы к запуску вашего DatePickerDialog для отображения по мере необходимости. Например, вы можете добавить еще один элемент управления Button на экран своей деятельности, чтобы вызвать отображение DatePickerDialog. Его обработчик кликов может выглядеть примерно так:

1
2
3
public void onDateDialogButtonClick(View v) {
     showDialog(MY_DATE_DIALOG_ID);
}

Диалоги — это мощный инструмент пользовательского интерфейса, который может помочь вам сохранить гибкий и понятный пользовательский интерфейс вашего приложения. DatePickerDialogs особенно полезны для сбора ввода даты от пользователя воспроизводимым и стандартизированным способом. DatePickerDialog — это особый тип AlertDialog со всеми его функциями.

Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android, второе издание» и « Самс научи себя разработке приложений для Android за 24 часа, второе издание» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте [email protected] , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .

Купить Android-разработку беспроводных приложений, 2-е издание Купить Sam's Teach Yourself для Android-разработки приложений в течение 24 часов, второе издание Код Мамламбо в Код-Каньоне