Всплывающее окно, подобное any.do

Я пишу приложение, которое показывает пропущенные звонки и непрочитанные смс во всплывающем окне. Он также имеет функцию напоминания (закрыть всплывающее окно и открыть его по истечении заданного времени). Это похоже на всплывающее окно any.do.

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

Так я создал существующее всплывающее окно

windowManager = (WindowManager) context.getApplicationContext() .getSystemService(Context.WINDOW_SERVICE); this.inflater = LayoutInflater.from(context); params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.BOTTOM; vgPopupWindow = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.popup_mainwindow, null); vgPopupContent = (ViewFlipper) vgPopupWindow.findViewById(R.id.popup_content); vgPopupAreaContent = (ViewGroup) vgPopupWindow.findViewById(R.id.popup_area_content); vgPopupAreaActions = (ViewGroup) vgPopupWindow.findViewById(R.id.popup_area_actions); vgPopupTabs = (LinearLayout) vgPopupWindow.findViewById(R.id.popup_tabs); vgPopupHeader = (LinearLayout) vgPopupWindow.findViewById(R.id.popup_main_header); windowManager.addView(vgPopupWindow, params); 

Потому что я не был уверен, что WindowManager действительно подходит для этого, я также попытался сделать то же самое с деятельностью со следующим стилем

 <style name="PopupWindow" parent="CustomTheme"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">false</item> <item name="android:windowIsTranslucent">true</item> 

Теперь он выглядит так же, как версия WindowManager, но имеет одну проблему: я не могу получить доступ к окну моего приложения под ним, потому что полупрозрачные части окна выглядят идеально, но блокируют любые события щелчка в окне ниже, так что я могу Не прокручивайте его и не делайте с ним ничего. Как в any.do, я просто хочу, чтобы это окно появилось, но не блокировать любую возможность работать в окне ниже, пока всплывающее окно открыто.

EDIT: я хочу видеть всплывающее окно внизу, охватывающее 30% окна, но иметь возможность прокручивать под ним окно (а также выполнять события клика на нем) одновременно.

Поэтому мои вопросы:

  1. Является WindowManager правильным способом создания этого popupwindow?
  2. Если да, то почему он иногда исчезает? Как я могу предотвратить это?
  3. Если нет, как я могу создать активность, которая ведет себя как окно i, созданное с помощью WindowManager?
  4. Или оба пути неправильны? в этом случае; Правильно?

Вот код, который я использовал, чтобы сделать то же самое

 public class PopupActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AlertDialog.Builder adb = new Builder(this); AlertDialog dialogTest = adb.setTitle("Test title") .setMessage("Test message") .setNeutralButton("Button", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // do something PopupActivity.this.finish(); } }).create(); adb.setCancelable(false); dialogTest.show(); } } 

И стиль XML (первоначально размещенный здесь https://stackoverflow.com/a/2700683/995020 )

 <style name="Theme.Transparent" parent="AppTheme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:backgroundDimEnabled">false</item> </style> 

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

Intereting Posts
Как открыть другой фрагмент для recyclerview OnClick Генератор случайных символов с диапазоном (A..Z, 0..9) и пунктуацией Отправить E-mail в формате HTML InputFilter на EditText вызывает повторный текст Хорошие книги по расширенной реальности на платформе Android? Макет деятельности: класс фрагмента: vs android: атрибуты имени Установка случайной позиции кнопки в пределах ограничений Java / Android Как я могу изменить язык своего приложения? Как мы можем обрабатывать разные типы ответов с помощью Retrofit 2? Android: как я могу реализовать руководство пользователя или инструкцию приложения при запуске приложения Очистка стека, включая действия в разных задачах Устройство LG G3, не распознанное Eclipse на Windows Является ли конструктором частного внутреннего класса также частным? Ошибка PhoneGap – «Неподготовлено ReferenceError: cordova не определено» Android: загрузка данных, таких как facebook и твиттер