Диалоги и всплывающие окна в Android

Документация по дизайну Android в http://developer.android.com/design/building-blocks/dialogs.html позволяет четко различать диалоговые окна, оповещения, всплывающие окна и тосты. Он также рекомендует использовать DialogFragment класса DialogFragment и DialogFragment с помощью класса Toast . Однако мне не ясно, должны ли PopupWindow быть реализованы с помощью PopupWindow или с DialogFragment .

Я знаю, что DialogFragments обычно поставляются с кнопками Ok / Cancel и что местоположение PopupWindows можно определить, но:

  • Являются ли эти незначительные различия единственными аргументами для использования того или другого?
  • Является ли DialogFragment преемником PopupWindow , который в какой-то момент будет устаревшим?
  • Согласно ответу в https://stackoverflow.com/a/15165554/2482894 , PopupWindow «ограничен несколькими шаблонами», но я не могу найти ссылку на ограниченное количество шаблонов в документации по классу.
  • Итак, наконец, как бы вы реализовали всплывающие окна, подобные этим http://developer.android.com/design/media/dialogs_popups_example.png и почему?

Solutions Collecting From Web of "Диалоги и всплывающие окна в Android"

Если вам нужен диалог, как показано в ссылке, просто создайте их, создав специальный диалог, как указано ниже:

Создание объекта диалога:

 Dialog dialog = new Dialog(context,android.R.style.Theme_Translucent_NoTitleBar); 

Задайте настраиваемый вид этого диалога:

 show_dialog(){ dialog.setContentView(R.layout.custom_dialog);//your custom dialog layout. } 

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

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/custom_dialog_first_rl" android:background="@android:color/black"> <!-- write code for rest of your UI here --> </RelativeLayout> 

Теперь установите alpha для вашего первого относительного макета в show_dialog () следующим образом:

 show_dialog(){ dialog.setContentView(R.layout.custom_dialog);//your custom dialog layout. RelativeLayout custom_dialog_first_rl=(RelativeLayout)dialog.findViewById(R.id.custom_dialog_first_rl); custom_dialog_first_rl.getBackground().setAlpha(170); } 

Вызовите show_dialog() где вы хотите показать это диалоговое окно