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

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

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

  • Являются ли эти незначительные отличия единственными аргументами для использования одного или другого?
  • Является ли DialogFragment преемником PopupWindow, который будет устаревать в какой-то момент?
  • В соответствии с ответом в qaru.site/info/350501/... PopupWindow "ограничен несколькими шаблонами", но я не могу найти ссылку на ограниченное количество шаблонов в документации по классу.
  • Итак, наконец, как бы вы реализовали всплывающие окна, подобные этим http://developer.android.com/design/media/dialogs_popups_example.png и почему?

Ответ 1

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

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

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(), где вы хотите показать это диалоговое окно