2013-08-29 2 views
12

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

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

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

Ok, согласно [dialogs.html] (HTTP : //developer.android.com/guide/topics/ui/dialogs.html), они рекомендуют использовать 'DialogFragment'even для таких окон, как [list_dialog] (http://developer.android.com/images /ui/dialog_list.png), который не имеет кнопок. Кроме того, я полагаю, что факт, основанный на «Фрагментах», облегчает добавление к BackStack, тогда как я не понимаю, как бы это сделать с помощью «PopupWindow». Поэтому я перехожу к подходу «DialogFragment», хотя я бы по-прежнему оценил некоторые более глубокие детали о сравнении обоих классов. – leo9r

ответ

2

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

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

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> 

Теперь набор альфа для вашего первого относительного расположения в 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() где вы хотите показать этот диалог

Смежные вопросы