Android studio как сделать всплывающее окно

Обновлено: 01.05.2024

Начиная с Android 3.0, работа с диалоговыми окнами чуть изменилась. С тех пор статья не переписывалась и могла морально устареть.

Общая информация

Диалоговые окна в Android представляют собой полупрозрачные «плавающие» активности, частично перекрывающие родительский экран, из которого их вызвали. Как правило, они затеняют родительскую активность позади себя с помощью фильтров размывания или затемнения. Вы можете установить заголовок с помощью метода setTitle() и содержимое с помощью метода setContentView().

Android поддерживает следующие типы диалоговых окон:

  • Dialog - базовый класс для всех типов диалоговых окон;
  • AlertDialog — диалоговое окно с кнопками, списком, флажками или переключателями;
  • CharacterPickerDialog - диалоговое окно, позволяющее выбрать символ с ударением, связанный с базовым символом;
  • ProgressDiaiog — диалоговое окно с индикатором прогресса при помощи компонента ProgressBar. В API 26 признан устаревшим. — диалоговое окно выбора даты с элементом DatePicker — диалоговое окно выбора времени с элементом TimePicker

Если ни один из существующих типов диалоговых окон вам не подходит, то можете создать своё собственное диалоговое окно.

Класс Dialog

Класс Dialog является базовым для всех классов диалоговых окон. Поскольку ProgressDialog, TimePickerDialog И DatePickerDialog — расширение класса AlertDialog, они также могут иметь командные кнопки.

Каждое диалоговое окно должно быть определено внутри активности или фрагмента, в которых будет использоваться. Диалоговое окно можно открыть один раз или несколько раз.

Для отображения диалогового окна необходимо вызвать метод showDialog() и передать ему в качестве параметра идентификатор диалога (константа, которую надо объявить в коде программы), который вы хотите отобразить.

Метод dismissDialog() прячет диалоговое окно (но не удаляет), не отображая его на экране. Окно остаётся в пуле диалоговых окон данной активности. При повторном отображении при помощи метода showDialog() будет использована кэшированная версия окна.

Метод removeDialog() удаляет диалоговое окно из пула окон данной активности. При повторном вызове метода showDialog() диалоговое окно придётся создавать снова.

Рассмотрим базовый пример создания диалогового окна на основе класса Dialog. Создайте простейшую разметку для диалогового окна - текстовое поле внутри LinearLayout. В разметку главной активности добавьте кнопку для вызова диалогового окна. В коде для главной активности напишем:

Dialog

По умолчанию при показе диалогового окна главная активность затемняется. В документации есть константы, позволяющие управлять степенью затемнения:

На эмуляторе я не заметил разницы. В старой версии Android 2.3 был ещё эффект размытия WindowManager.LayoutParams.FLAG_BLUR_BEHIND, который теперь считается устаревшим. Если вы по упрямству всё равно пропишите данный эффект, то получите не эффект размытия, а чёрный фон. Кто знает, может вас устроит данный вариант.

Методы onCreateDialog() и onPrepareDialog()

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

Можно создавать диалог без onCreateDialog(), например в обработчике нажатия кнопки вызова диалога, но тогда он не будет присоединён к текущей активности. Чтобы прикрепить его к активности, необходимо вызвать метод setOwnerActivity(), передав ему в качестве параметра текущую активность.

Перейдём к примеру. Если в активности должны вызываться несколько различных диалоговых окон, сначала необходимо определить целочисленный идентификатор для каждого диалога, например:

Эти идентификаторы потом можно использовать в вызове метода showDialog() и в обработчике события onCreateDialog() в операторе switch:

Следует отметить, что методы Activity.onCreateDialog() и Activity.onPrepareDialog() устарели. Используйте DialogFragment.

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

Примеры создания диалоговых окон типа AlertDialog рассмотрены в этой статье

AlertDialog с ссылкой

В Android 3.0 (API 11) появилась новинка - класс android.app.DialogFragment и его аналог android.support.v4.app.DialogFragment, а чуть позже и android.support.v7.app.AppCompatDialogFragment из библиотеки совместимости, позволяющие выводить диалоговое окно поверх своей активности. Раньше использовался класс Dialog и его производные, например, AlertDialog. Они никуда не делись, только теперь их нужно встраивать в фрагмент, который выступает в качестве контейнера. Поэтому условно разговор о диалоговых окнах можно разбить на две части - как использовать DialogFragment и как пользоваться классами Dialog, AlertDialog и другими диалоговыми окнами. После появления AndroidX имена пакетов очередной раз изменились, теперь следует импортировать androidx.fragment.app.DialogFragment, androidx.appcompat.app.AlertDialog и другие аналогичные классы.

Для создания диалога следует наследоваться от класса DialogFragment. Создадим новый класс MyDialogFragment:

Допустим у нас есть кнопка на экране активности. Вызвать диалоговое окно можно через метод show().

DialogFragment

Скорее всего вы увидите пустой прямоугольник или квадрат. А возможно у вас просто потемнеет экран активности.

Так как это обычный фрагмент, то нам нужно позвать менеджера фрагментов и попросить его показать фрагмент.

Для вызова диалога мы создаём экземпляр класса MyDialogFragment и вызываем метод show(). Метод принимает два параметра: объект класса FragmentManager, получаемый через метод getSupportFragmentManager(), и тег - идентификатор диалога в виде строковой константы, по которому можно идентифицировать диалоговое окно, если их будет много в нашем проекте.

Существует и альтернативный вариант показа окна через транзакцию.

Мы получили пустой бесполезный фрагмент. Следует заняться его конструированием. В созданном классе нужно переопределить метод onCreateDialog(). Если используется разметка, то также используется метод onCreateView(), как и у обычных фрагментов. Скорее всего вы не будете заново изобретать велосипед, а будете использовать готовые варианты диалоговых окон.

AlertDialog

Самый распространённый вариант диалогового окна - это AlertDialog. С него и начнём.

Диалоговое окно AlertDialog является расширением класса Dialog, и это наиболее используемое диалоговое окно в практике программиста. Очень часто требуется показать диалог с кнопками Да и Нет, а также Мур и Мяу . В создаваемых диалоговых окнах можно задавать следующие элементы:

AlertDialog с одной кнопкой

Начнём с простого примера - покажем на экране диалоговое окно с одной кнопкой.

В класс фрагмента добавляем метод.

Внешний вид от версии к версии может меняться. В частности, недавно поменяли цвет текста для кнопки.

AlertDialog с одной кнопкой

Сама обработка нажатия кнопки внутри диалогового окна задаётся внутри метода setPositiveButton(). В нашем случае мы просто закрываем окно диалога через метод cancel().

Обратите внимание на не совсем обычный способ вызова череды методов цепочкой через точку .setMessage("Покормите кота!").setIcon(R.drawable.ic_android_cat) и т.д. Такой синтаксис можно часто увидеть в jQuery. При таком способе не нужно использовать точку с запятой в конце каждого метода, вы просто склеиваете все вызовы. Но можете использовать и обычный синтаксис.

Если вы используете Java 8, то студия предложит использовать лямбда-выражение вместо анонимного класса. Решайте сами, в каком стиле писать код.

Заголовок. Метод setTitle()

AlertDialog Title

А если очень хочется вывести длинную строку в заголовке? Тогда вместо setTitle() можно вызвать setCustomTitle() и передать ему View, в нашем случае это будет TextView.

При этом перестал выводиться значок. Обидно.

AlertDialog Title

Нелёгкий выбор - пример с двумя кнопками

Нелёгкий выбор

Теперь рассмотрим пример создания диалогового окна с двумя кнопками на основе иллюстрации.

Внешний вид диалоговых окон в разных версиях Android.

AlertDialog с кнопками

AlertDialog с кнопками

Общая часть кода осталась прежней - объект класса AlertDialog.Builder, методы для настройки окна, а также кнопки диалога и обработку событий на них. В AlertDialog можно добавить только по одной кнопке каждого типа: Positive, Neutral и Negative, т. е. максимально возможное количество кнопок в диалоге — три. На названия кнопок не обращайте внимания, они не несут смысловой нагрузки, а только определяют порядок вывода. Причём в разных версиях Android порядок менялся. Поэтому на старых устройствах кнопка "Да" может быть первой, а на новых - последней. Для каждой кнопки используется один из методов с префиксом set. Button, которые принимают в качестве параметров надпись для кнопки и интерфейс DialogInterface.OnClickListener, определяющий действие при нажатии. Чтобы пользователь не мог закрыть диалог нажатием в любой точке экрана, вызывается метод setCancelable() с значением true.

Три кнопки

Рассмотрим пример с тремя кнопками. Разницы практически нет. Повторяем все предыдущие шаги, для отображения диалогового окна вызывается метод builder.create(). Например, для создания диалога с кнопками Мяу, Гав, Сам дурак! код будет выглядеть приблизительно так:

AlertDialog в onCreateDialog

AlertDialog со списком

Если вам нужно диалоговое окно со списком выбираемых пунктов вместо кнопок, то используйте метод setItems(), где нужно указать массив данных для отображения в списке диалога. Данный метод нельзя использовать вместе с методом setMessage(), так они выводят содержимое в основной части окна.

Выбранный элемент содержится в параметре which. При выборе одного из пунктов меню появится всплывающее уведомление, показывающее выбранного кота.

Напоминаю, что внешний вид окна менялся от версии к версии.

AlertDialog со списком

AlertDialog с переключателями

Для создания диалогового окна с переключателями применяется метод setSingleChoiceitems() вместо метода setItems().

Обратите внимание на следующие детали. При выборе переключателя диалоговое окно закрываться не будет. Поэтому необходимо предусмотреть механизм закрытия окна, например, добавить кнопку. Второй момент - в методе setSingleChoiceitems для первого параметра используется массив значений для переключателей, а для второго параметра используется целочисленное значение индекса переключателя, который будет включён по умолчанию при вызове диалогового окна. Если вы хотите, чтобы все переключатели при запуске были в выключенном состоянии, то используйте значение -1.

AlertDialog с переключателями

AlertDialog с переключателями

AlertDialog с флажками

Если вы хотите использовать вместо переключателей флажки (CheckBox) для множественного выбора, то вам нужен метод setMultiChoiceItems(). Код практически идентичен предыдущему примеру:

Первый параметр в методе setMultiChoiceItems() — массив значений для списка с флажками, второй параметр — булевый массив состояний флажков списка по умолчанию при вызове диалога. Например, мы хотим, чтобы второй элемент списка был отмечен флажком, а остальные элементы нужно оставить неотмеченными. В этом случае используем массив из булевых значений:

Как и в предыдущем случае с переключателями, для диалогового окна с флажками необходимо использовать кнопки для закрытия окна.

AlertDialog с флажками
AlertDialog с флажками

Автоматическое закрытие окна

Добавим в проект кнопку для вызова самозакрывающего диалогового окна и напишем код для обработчика щелчка кнопки (старый пример без использования фрагмента):

AlertDialog с рейтингом (проблемный пример)

Однажды я повстречал в сети пример включения компонента RatingBar в диалог. При тестировании обнаружил, что код работает не совсем корректно. На экран всегда выводятся шесть звёздочек, несмотря на установленные настройки. А если развернуть приложение в альбомный режим, то выводятся и семь звёздочек и больше, в зависимости от размеров экрана. Оставил пример на память, если кто-то разберётся в чём тут была проблема, то дайте знать. Это тоже старый пример без использования фрагмента.

AlertDialog с RatingBar

Решение проблемы

res/layout/ratingdialog.xml

Теперь модифицированный код:

RatingBar

Обратите внимание, что для доступа к свойствам RatingBar, мы вызываем метод View.findViewById(), а не Activity.findViewById(), как обычно мы привыкли делать в методе onCreate(), когда опускаем название класса.

Передать данные в активность

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

В коде каких-то сложностей нет - устанавливаем заголовок, значок, кнопки. При построении диалогового окна указываем родительскую активность и название методов в ней, которые будут отвечать за обработку нажатий кнопок диалога - в нашем случае это методы okClicked() и cancelClicked(). Кстати, имена методов будут подчёркнуты красной линией и среда разработки предложит создать данные методы в классе активности (используйте комбинацию клавиш Alt+Enter).

Возвращаемся в код главной активности и пропишем код для нажатий кнопок диалогового окна:

DialogFragment

Пример был написан по принципу - "работает и ладно". На самом деле пример не совсем грамотный, хотя даже в документации он ещё встречается.

Правильный вариант рассматривается во второй части о диалоговых окнах DialogFragment.

AlertDialog с собственной разметкой

Если стандартный вид AlertDialog вас не устраивает, то можете придумать свою разметку и подключить её через метод setView()


Теория

Практика

Обычно пишут в одну строчку, соединяя вызов методов в цепочку .

У метода makeText() есть три параметра:

  • LENGTH_SHORT — (По умолчанию) показывает текстовое уведомление на короткий промежуток времени;
  • LENGTH_LONG — показывает текстовое уведомление в течение длительного периода времени.

Если покопаться в исходниках Android, то можно найти такие строчки:

Как видите, уведомления выводятся на 3 с половиной секунды или на 2 секунды. Других вариантов нет, не пытайтесь использовать другие значения - у вас ничего не получится.

Настройка позиции на экране

По умолчанию стандартное всплывающее уведомление появляется в нижней части экрана. Изменить место появления уведомления можно с помощью метода setGravity(int, int, int). Метод принимает три параметра:

  • стандартная константа для размещения объекта в пределах большего контейнера (например, GRAVITY.CENTER, GRAVITY.TOP и др.);
  • смещение по оси X
  • смещение по оси Y

Например, если вы хотите, чтобы уведомление появилось в центре экрана, то используйте следующий код (до вызова метода show()):

Для вывода в левом верхнем углу.

Если нужно сместить уведомление направо, то просто увеличьте значение второго параметра. Для смещения вниз нужно увеличить значение последнего параметра. Соответственно, для смещения вверх и влево используйте отрицательные значения.

Не забывайте про метод show()

Kotlin Java

Пример

Создайте новый проект или используйте любой старый проект из предыдущих занятий. Добавьте на экран активности кнопку и присвойте ей текст Показать Toast. Теперь напишем код:

Toast

Для закрепления материала напишем ещё один пример. Удалим предыдущий код для щелчка кнопки и напишем такой код:

Добавляем картинку

Toast с картинкой

Вообще, получив доступ к контейнеру, вы можете делать с ним что угодно. Например, сделать его прозрачным. Смотрится интересно.

Создание собственных всплывающих уведомлений

В предыдущем примере мы получили доступ к контейнеру через метод getView(). Можно пойти от обратного - подготовить свой контейнер и внедрить его в объект Toast через метод setView().

Вам нужно создать разметку в файле res/layout/custom_toast.xml.

Определите два дочерних элемента ImageView и TextView:

Для получения разметки из ХМL-файла и работы с ней в программе используется класс LayoutInflater и его метод getLayoutInflater(), которые возвращает объект LayoutInflater. Затем вызовом метода inflate() получают корневой объект View этой разметки. Например, для файла разметки уведомления с именем custom_toast.xml и его корневого элемента c идентификатором android:id="@+id/custom_toast_container" код будет таким:

Параметры, передаваемые в метод inflate():

  • идентификатор ресурса макета (custom_toast.xml);
  • идентификатор ресурса корневого элемента (custom_toast_container).

После получения корневого элемента из него можно получить все дочерние элементы методом findViewByid() и определить информационное наполнение для этих элементов.

Затем создаётся объект Toast и устанавливаются нужные свойства, например, Gravity и продолжительность времени показа уведомления.

После этого вызывается свойство view() (Kotlin) или метод setView() (Java), которому передаётся разметка уведомления, и метод show(), чтобы отобразить уведомление с собственной разметкой.

Ради интереса можете посмотреть, как выглядит разметка в исходных кода Android.

Toast.Callback

Использование уведомлений Toast в рабочих потоках

Как элемент графического интерфейса Toast должен быть вызван в потоке GUI, иначе существует риск выброса межпотокового исключения. В листинге объект Handler используется для гарантии того, что уведомление Toast было вызвано в потоке GUI.

Дополнительные сведения

Заключение

Чтобы создать заметное пользователю окно с полезной информацией разработчики IDE под Андроид придумали класс Android Studio Toast. В процессе работы программы человек получает заранее созданный месседж, например, о том, что нужно не забыть купить продукты к праздничному столу или вызвать мастера по ремонту стиральной машинки.

Два слова о теории

android studio toast

Как это выглядит на практике

Toast toast = Toast.makeText(getApplicationContext(),

«Срочно купить продукты!» , Toast.LENGTH_SHORT);

Метод makeText() имеет три значения:

  • контекст;
  • содержание месседжа;
  • количество времени показа окна.

Но программист способен изменять лишь два последних.

Изменяем длительность демонстрации окна – варианты:

  • LENGTH_SHORT — (значение установлено как дефолтное) – текст появляется на дисплее и задерживается совсем недолго. Это будет соответствовать коду: private static final int SHORT_DELAY = 2000
  • LENGTH_LONG — параметр для длительной демонстрации. Здесь получим: private static final int LONG_DELAY = 3500

Числовые значения 3500 и 2000 – это время в миллисекундах, то есть - 2 и 3,5 секунд. Другие длительности задать не удастся.

Как задать позицию на дисплее

Если ничего не менять, то окно с заданным текстом появится внизу дисплея. Задать иные свойства можно при использовании setGravity(int, int, int). Тут определяются 3 значения:

  • обычная постоянная для демонстрации объектов в рамка контейнера (пример: GRAVITY.CENTER или GRAVITY.TOP);
  • число, определяющее координату «X»;
  • значение «Y».

Пример: месседж должен возникнуть посередине дисплея:

toast.setGravity(Gravity.CENTER, 0, 0);

Координаты «Х» и «У» могут принимать числовые значения со знаками: плюс или минус – соответственно окно так же будет смещаться относительно центра.

Немного о методе show()

Образец кода

Для тренировки можно сделать другой проект или же открыть имеющийся.

Шаг 1. Вводим новый элемент «Кнопка» на активный дисплей, присваиваем ему значение: «Показать Toast».

Шаг 2. Записываем:

public void showToast(View view)

//здесь создадим текст с требуемым содержимым

Toast toast = Toast.makeText(getApplicationContext(),

"Срочно купить продукты!",

toast.setGravity(Gravity.CENTER, 0, 0); // Тут координаты – мессендж возникнет по центру.

toast.show(); // Обязательная строка вызова.

Шаг 3. Проверка: если запустить активный проект и кликнуть по кнопке, то на пару секунд появится окно с нашим текстом и пропадёт само собой.

Вставляем изображение

Метод setView() позволяет внедрить фото или другое изображение в наше окно.

Перемещаем нужную картинку в папку «res/drawable». Это будет новый доступный для IDE ресурс. Если имя рисунка pic.jpg, то в программном коде он станет доступным при написании: R.drawable.pic.

Вот весь код вызова Тоаст с нашей сохранённой картинкой:

public void showToast(View view)

Toast toast3 = Toast.makeText(getApplicationContext(),

toast3.setGravity(Gravity.CENTER, 1, -1);

LinearLayout toastContainer = (LinearLayout) toast3.getView();

ImageView catImageView = new ImageView(getApplicationContext());

catImageView.setImageResource(R.drawable.pic); // Вызов нашего рисунка.

Допускается подготовка собственных контейнеров и внедрение их в объекты Toast посредством методов setView().

Иногда стандартного месседжа недостаточно для создания пользовательского приложения, тогда программист может применить особый дизайн разметки будущего окошка. Чтобы получить структурные данные из ХМL и работать с ними, в коде используют классы под названием «LayoutInflater» и их методы: getLayoutInflater() / getSystemService(), они способны вернуть LayoutInflater. Потом посредством инициации inflate() получаются блоки view.

Применение месседжей

Дополнительная информация

При программировании следует указывать информацию о контексте в параметре makeText(). Если возникают проблемы – странное поведение месседжа или текста внутри него – следует прибегать к методу getApplicationContext().

Пользователям часто нужны напоминания, которые будут указывать на выбор или ошибки. Для этого в Android есть специальная встроенная программа, которая гибко настраивается под любые задачи – android studio всплывающее окно. При помощи сервиса удается экономить память и другие ресурсы, создавая заголовки, информационный массив, клавиши и прочее.

Что такое Android Studio? Это специальная среда IDE, которая позволит работать, настраивать и управлять операционной системой Android.

Android Studio: всплывающее диалоговое окно AlertDialog

С одной клавишей

Для начала следует разобраться с легким примером, в котором используется только 1 клавиша. Первым делом формируется объем AlertDialog.Builder, передающий в виде примера контекст. После в работу входит техника Builder и формируется для всплывающего меню заголовок, используя команду setTitle(). Для текста подходит способ setMessage(), установка значка формируется в виде setIcon(). Чтобы установить клавишу, применяется техника setNegativeButton(), а обеспечить возможность нажатия на сделанную кнопку поможет комбинация cancel(). Обращать внимание на название техник не нужно, они не несут большой нагрузки.

android studio всплывающее окно

Для исключения закрытия диалогового окна при помощи кнопки возврата на смартфоне, применяется метод setCancelable() со значением false. В самом конце требуется добиться всплывания окна при помощи команды show(). Например:

Особенности создания и пример с 2 клавишами

На основе кода видно пример формирования диалогового окна с наличием 2 клавиш для использования:

Общие параметры кода не меняются, прежними будут настройки, клавиши и обработка информации. Доступно добавлять в AlertDialog только по 1 клавише любого вида, поэтому в окне будет максимум 3 кнопки для использования.

android studio alertdialog

Для каждого показателя применяются методы со вставкой set. Button, принимающие за основу подпись и внешний вид DialogInterface.OnClickListener, характеризующий операцию при касании. Чтобы исключить закрытие с помощью клавиатуры смартфона, в коде прописывается setCancelable() со значением false или true. Чтобы результат работы отобразился на экране, применяется способ show().

AlertDialog – гибкая программа для настроек. Всплывающее окно бывает самым простым с классическим выбором "Да" и "Нет", но при помощи перечня, флажков или переключателей, конструкция будет усложняться.

Метод onCreateDialog в AlertDialog

Чтобы при помощи android studio alertdialog сохранило состояние, потребуется применять способ активности onCreateDialog(). Для начала выполняются описанные этапы, а для показа работы указывается builder.create(). Пример кода:

Поскольку в одном приложении применяется сразу несколько типов диалоговых окон, потребуется сделать отдельный идентификатор, который поможет вызывать конкретный диалог. Работая на новой ОС Android видно, что метод показа всплывающего окна перечеркнут, поскольку он устаревший. С версии 3.0 пользуются техникой DialogFragment. Для проекта идентификатором выступает IDD_THREE_BUTTONS.

android studio dialog

AlertDialog с перечнем

Некоторым пользователям важно использовать окна, в которых будет список с несколькими строками на выбор. Они заменяют клавиши, и для этого в коде применяют способ setItems(). В нем указывается часть информации для вывода на экран и dialogInterface.OnClickListener, позволяющий выбрать действие, во время выбора конкретной части из перечня. Для этого готовый код дополняется еще одной клавишей:

android studio диалоговое окно

AlertDialog с переключателями

Всплывающее меню можно сделать с переключателями RadioButton. Для этого применяется техника setSingleChoiceitems() взамен способу setItems(). Если при помощи android studio диалоговое окно делается внутри onCreateDialog(), тогда операционная система Андроид будет управлять состоянием перечня при помощи переключателей. На момент активной работы, меню при дальнейших вызовах сохранит в памяти, ранее выбранные строки.

Создавая проект нужно обратить внимание на детали. Когда выбирается переключатель, всплывающее окно не будет закрываться, нужно заранее продумать этот момент и технику закрытия. К примеру, возможно добавить клавишу. Вторым фактором при использовании способа setSingleChoiceitems выступает то, что для первого значения применяется полный код и настройки, а для второго нужно применить целочисленный показатель индекса, оставляя его включенным всегда при всплывании окна. Значение "-1" применяется для отключения переключателей во время старта окна.

android studio alertdialog со списком

AlertDialog с флажками

Описанные переключатели возможно заменить флажками, которые называются CheckBox. Чтобы получить доступ к выбору параметров, необходимо применить код setMultiChoiceItems(). Визуально изменений почти нет, а детали можно просмотреть в самом коде:

Первое значение в способе setMultiChoiceItems() выступает массивом настроек для перечня с флажками.

Android Studio: всплывающее диалоговое окно AlertDialog

Второе считается булевым массивом состояний, заданных по стандартным настройкам при вызове окна. К примеру, чтобы отметить флажком вторую строку, а другие оставить без изменений, используется код:

По аналогии с переключателями для всплывающего меню с флажками потребуется применять клавиши для закрытия меню. В запущенном приложении сохраняется предыдущий параметр состояния.

Автоматическое закрытие окна

Android Studio: всплывающее диалоговое окно AlertDialog

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

AlertDialog с рейтингом (проблемный пример)

Применение метода RatingBar для диалогового окна приводит к некорректной работе кода. На дисплее смартфона всегда всплывает 6 звездочек, невзирая на заданные параметры. Если перевернуть приложение в альбомную ориентацию, то будет показано от 7 звездочек, исходя из диагонали.

Android Studio: всплывающее диалоговое окно AlertDialog

Для решения проблемы нужно элемент RatingBar поместить в макете wrap_content. Рекомендуется сделать отдельную разметку, с подключением ее к всплывающему окну. Для открытия доступа к настройкам элемента используется метод View.findViewById().

Следует избегать ProgressDialog

Android studio dialog – стандартный класс для всех всплывающих окон. ProgressDialog – это расширение, но оно тоже имеет специальные клавиши, а также индикатор выполненных задач. Но если потребуется показать процесс загрузки или любой другой информации, тогда используется отдельная инструкция по дизайну, что позволяет применять расширение в созданном макете.

Android Studio: всплывающее диалоговое окно AlertDialog

Все классы позволяют установить стиль, структуру диалогового окна, но для этого применяется DialogFragment, как отдельный элемент. Эта группа дает возможность работы со всеми функциями, которые требуются для формирования всплывающих окон, их дизайном, вместо вызова способов к объекту Dialog.

В результате того, что описанный класс первоначально есть в Android 3.0, в нем будет описано применение класса DialogFragment, которое есть в Библиотеке поддержки. После ее добавления можно воспользоваться самим классом и другими API на гаджетах под управлением ОС Android 1.6 и выше. Если применяются вспомогательные библиотеки, рекомендуется провести импорт класса android.support.v4.app.DialogFragment, но не использовать android.app.DialogFragment.

На видео детально представлены диалоговые окна и программирование Андроид:

Читайте также: