Android диалог выбора даты

Диалоговые окна

DatePickerDialog и TimePickerDialog

По умолчанию в Android уже определены два диалоговых окна — DatePickerDialog и TimePickerDialog , которые позволяют выбрать дату и время.

Кроме установки даты DatePickerDialog позволяет обработать выбор даты с помощью слушателей OnDateChangedListener и OnDateSetListener . Что позволяет использовать выбранную дату далее в приложении.

Подобным образом TimePickerDialog позволяет обработать выбор времени с помощью слушателей OnTimeChangedListener и OnTimeSetListener

Пи работе с данными компонентами надо учитывать, что отсчет месяцев в DatePickerDialog начинается с нуля, то есть январь будет иметь номер 0, а декабрь — 11. И аналогично в TimePickerDialog отсчет секунд и минут будет идти с 0 до 59, а часов — с 0 до 23.

Используем DatePickerDialog и TimePickerDialog в приложении. Определим следующую разметку интерфейса в activity_main.xml :

Здесь определены две кнопки для выбора даты и времени и текстовое поле, отображающее выбранные дату и время. И изменим код MainActivity :

Ключевым классом здесь является java.util.Calendar , который хранится в стандартной библиоетке классов Java. В методе setInitialDateTime() мы получаем из экземпляра этого класса количество миллисекунд dateAndTime.getTimeInMillis() и с помощью форматирования выводим на текстовое поле.

Метод setDate() , вызываемый по нажатию на кнопку, отображает окно для выбора даты. При создании окна его объекту передается обработчик выбора даты DatePickerDialog.OnDateSetListener , который изменяет дату на текстовом поле.

Аналогично метод setTime() отображает окно для выбора времени. Объект окна использует обработчик выбора времени TimePickerDialog.OnTimeSetListener , который изменяет время на текстовом поле.

И поле запуска, нажав на кнопку изменения времени, мы сможем установить время:

Источник

DatePicker

Элемент DatePicker позволяет пользователю выбрать дату (число, месяц, год). Данный виджет используют как правило на отдельном экране. Также существует похожее по функционалу диалоговое окно DatePickerDialog.

DatePicker находился в разделе Date & Time в Android Studio 3.01. Сейчас на панели инструментов данного компонента нет, поэтому придётся добавлять вручную.

Нужно помнить, что внутренняя нумерация месяцев в Android начинается с 0, поэтому январь = 0, февраль = 1 и т.д. Поэтому как правило, в коде следует прибавлять единицу к значению месяца при работе с датой или наоборот — отнимать единицу, если данные поступают снаружи (например, из текстового поля).

Добавим на экран текстовую метку, кнопку и виджет даты:

Пользователь может выбрать любую дату на виджете, а обычный щелчок на кнопке позволит отобразить выбранную дату в текстовой метке. Длительное нажатие на кнопку устанавливает текущую дату на виджете и в текстовой метке.

Настройка даты на самом виджете происходит через метод init(). Изменение даты можно прослушивать через OnDateChangedListener():

Читайте также:  Восстановление удаленной информации с андроид

Настройка компонента

По умолчанию DatePicker состоит из двух элементов — Spinner и CalendarView. Вы можете настроить внешний вид компонента, если укажете через XML-атрибуты android:calendarViewShown и android:spinnersShown, какой элемент не нужно выводить. Также можно это сделать программно через методы setCalendarViewShown() и setSpinnersShown() (API level 11).

Напишем пример программного управления внешним видом DatePicker:

Код для активности:

Новый внешний вид в Android 5.0 (API 21) Lollipop

В Android 5.0 (API 21) внешний вид компонента изменился. Поэтому неплохо бы проверить, всё ли работает в старом коде.

Скриншот взят из статьи Криминальное чтиво.

Источник

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

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

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

Пререквизиты: Основы диалога

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

Шаг 1. Определение нового диалога выбора даты

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

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

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

Шаг 2. Создание DatePickerDialog

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

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

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

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

Читайте также:  Http android tornado ru

Шаг 3: Инициализация DatePickerDialog

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

Источник

Полный список

Урок будет аналогичен прошлому, но теперь в диалоге мы будем задавать дату, а не время. Такой диалог называется DatePickerDialog.

Сделаем простое приложение. На экране будет TextView, на него можно будет нажать и появится диалог для выбора даты. После выбора она отобразится в TextView.

Project name: P0591_DatePickerDialog
Build Target: Android 2.3.3
Application name: DatePickerDialog
Package name: ru.startandroid.develop.p0591datepickerdialog
Create Activity: MainActivity

В onCreate находим TextView.

В onClick вызываем метод showDialog и передаем ему ID диалога. Этот метод (showDialog) создает диалог с помощью отдельного метода и показывает его. ID используется для указания, какой именно диалог создавать и показывать.

Метод onCreateDialog – это и есть отдельный метод, который вызывается в showDialog для создания диалога. В этом методе мы смотрим, какой ID пришел на вход, создаем соответствующий диалог и возвращаем его.

В нашем случае мы создаем DatePickerDialog, используя конструктор:

context – контекст
callBack – это обработчик с интерфейсом DatePickerDialog.OnDateSetListener, метод которого срабатывает при нажатии кнопки ОК на диалоге
year – год, который покажет диалог
monthOfYear – месяц, который покажет диалог
dayOfMonth – день, который покажет диалог

myCallBack – объект, реализующий интерфейс DatePickerDialog.OnDateSetListener. У него только один метод – onDateSet, который предоставляет нам DatePicker из диалога, и год, месяц и день, которые он показывает. Т.е. то, что мы ввели в диалоге.

Эти данные мы пишем в tvDate.

Все сохраним и запустим. Нажмем на TextView. Появился диалог для ввода даты.

Сейчас он показывает 3 марта 2011, т.к. мы при создании передали ему значения myYear, myMonth и myDay. Месяцы он считает, начиная с нуля.

Текст показал новые значения. Обратите внимание, что месяц декабрь он выдал как число 11. Месяцы нумеруются с нуля.

Диалог также можно закрыть кнопкой Cancel или кнопкой Back на эмуляторе. В этом случае обработчик не сработает и текст не обновится.

На следующем уроке:

— создаем AlertDialog
— настраиваем заголовок, сообщение, картинку и кнопки

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

Читайте также:  Перезагрузка планшета с андроидом

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Диалоговые окна в Android 4 и 5

&copy Денис Колисниченко

В этой статье мы рассмотрим диалоги следующих типов:

  • AlertDialog — диалог с кнопками;
  • DatePickerDialog — диалог выбора даты;
  • TimePickerDialog — диалог выбора времени.

1. AlertDialog

Самый частый вариант применения диалога AlertDialog — это классический диалог вопроса с кнопками Да и Нет. Вот сейчас и займемся его разработкой. При запуске наше приложение отобразит диалог, при нажатии кнопки Нет не будет произведено никаких действий — будет вызван метод cancel() . А вот действие при нажатии кнопки Да запрограммируете вы сами — но позже, когда научитесь устанавливать интернет-соединения. Взгляните, как будет выглядеть наш диалог на рис. 1.

Код приложения, отображающего этот диалог, представлен в листинге 1.

Рис. 1. Диалог типа AlertDialog

Листинг 1. Отображение диалога типа AlertDialog

package com . sample . dialog ;

public class MainActivity extends ActionBarActivity <

protected void onCreate(Bundle savedInstanceState) <

AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);

alt_bld.setMessage(» Подключиться к dkws.org.ua ?»)

.setPositiveButton(» Да «, new DialogInterface.OnClickListener() <

public void onClick(DialogInterface dialog, int id) <

// Действие для кнопки Да

.setNegativeButton(» Нет «, new DialogInterface.OnClickListener() <

public void onClick(DialogInterface dialog, int id) <

// Действие для кнопки Нет

AlertDialog alert = alt_bld.create();

// Title for AlertDialog

// Icon for AlertDialog

Далее мы рассмотрим диалоги выбора даты и времени.

2. DatePickerDialog

Диалоги выбора даты и времени очень «многострадальные». С ними вечно все не так. Мало того, что код вызова такого диалога довольно непростой, так еще и меняется из версии в версию API. Так, для показа диалога ранее использовался метод ShowDialog (), который сейчас использовать не рекомендуется. Вместо него нужно использовать вот такую конструкцию, вовлекающую метод show():

DatePickerDialog dpg = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);

А что, если нужно, чтобы программа была максимально совместима со всеми версиями? Тогда нужно использовать ShowDialog() и в то же время обеспечить, чтобы среда разрешила компиляцию. Для этого нужно добавить директиву @SuppressWarnings(«deprecation»). Да, решение не очень хорошее, но зато работает от API 8 (2.x) до API 21 (5.0).

Далее я старался максимально упростить код. Сравните приведенный ниже код с кодом (и решением) с руководства разработчика:

Само приложение тоже очень простое. Оно содержит только надпись с призывом выбрать дату (рис. 2). При щелчке по надписи открывается диалог выбора даты (рис. 3), а после выбора даты и нажатия кнопки Done выбранная пользователем дата отображается в надписи (рис. 4).

Рис. 2. Щелкните по надписи для выбора даты

Рис. 3. Диалог выбора даты

Рис. 4. Выбранная дата отображена в текстовой надписи

Разметка приложения приведена в листинге 2, а Java-код приложения — в листинге 3.

Источник

Оцените статью