Могу ли я уменьшить фон, используя PopupWindow вместо диалога? Я спрашиваю об этом, потому что я использую Dialogs, но Dialog не отображается ниже элемента, нажатого, и с PopupWindow у меня уже есть всплывающее окно, отображаемое ниже элемента.Исключить фон, используя PopupWindow в Android
1
A
ответ
10
Я использую следующий код, и он хорошо работает для меня.
public static void dimBehind(PopupWindow popupWindow) {
View container;
if (popupWindow.getBackground() == null) {
if (VERSION.SDK_INT >= VERSION_CODES.M){
container = (View) popupWindow.getContentView().getParent();
} else {
container = popupWindow.getContentView();
}
} else {
if (VERSION.SDK_INT >= VERSION_CODES.M) {
container = (View) popupWindow.getContentView().getParent().getParent();
} else {
container = (View) popupWindow.getContentView().getParent();
}
}
Context context = popupWindow.getContentView().getContext();
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams p = (WindowManager.LayoutParams) container.getLayoutParams();
p.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
p.dimAmount = 0.3f;
wm.updateViewLayout(container, p);
}
От This answer.
0
На данный момент я использую Диалог. Но если у кого-то была другая идея, пожалуйста, дайте мне знать ...
3
Решение JiaJiaGu работает, но popupWindow будет перекрываться с панелью навигации, поскольку он очищает все остальные флаги.
Так что я изменить немного здесь:
public static void dimBehind(PopupWindow popupWindow) {
View container;
if (popupWindow.getBackground() == null) {
if (VERSION.SDK_INT >= VERSION_CODES.M){
container = (View) popupWindow.getContentView().getParent();
} else {
container = popupWindow.getContentView();
}
} else {
if (VERSION.SDK_INT >= VERSION_CODES.M) {
container = (View) popupWindow.getContentView().getParent().getParent();
} else {
container = (View) popupWindow.getContentView().getParent();
}
}
Context context = popupWindow.getContentView().getContext();
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams p = (WindowManager.LayoutParams) container.getLayoutParams();
p.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; // add a flag here instead of clear others
p.dimAmount = 0.3f;
wm.updateViewLayout(container, p);
}
я отправляю новый ответ, потому что я не могу прокомментировать ответ JiaJiaGu в.
1
Кажется, я выяснил, как избавиться от проверки версии API. Использование container = popupWindow.getContentView().getRootView()
решает проблему, однако я еще не тестировал ее для старых API. Адаптация решения Junyue Cao:
public static void dimBehind(PopupWindow popupWindow) {
View container = popupWindow.getContentView().getRootView();
Context context = popupWindow.getContentView().getContext();
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams p = (WindowManager.LayoutParams) container.getLayoutParams();
p.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
p.dimAmount = 0.3f;
wm.updateViewLayout(container, p);
}
Смежные вопросы
- 1. Android: фон моего PopupWindow прозрачна
- 2. Android PopupWindow: белый фон, но сохранить тень?
- 3. Размытие или тусклый фон, когда Android PopupWindow активен
- 4. Как установить popupwindow фон с якорем
- 5. Android Custom PopupWindow/Dialog
- 6. Android PopUpWindow
- 7. ListView в Android PopupWindow
- 8. Android - DatePicker в popUpWindow
- 9. android viewpager в popupwindow
- 10. PopupWindow фон иногда становится прозрачными и фиолетовый
- 11. Открыть PopupWindow в PopupWindow
- 12. Исключить фон индикатора прогресса
- 13. Приглушенно Фон PopupWindow исключает Панель инструментов/Действие Bars
- 14. PopupWindow Dim Background в Android 6 (Marshmallow)
- 15. Кнопка Android Inside PopupWindow
- 16. Android Modeless Popupwindow
- 17. Android non модальный PopupWindow
- 18. Стилированный фон, используемый в макете прозрачного PopupWindow не работает
- 19. Android PopupWindow с Tooltip Arrow
- 20. Изменить содержимое Android PopUpWindow
- 21. Android PopupWindow Пользовательская анимация Java
- 22. Как создать PopupWindow при запуске в android?
- 23. Android: установить фон макета, используя путь изображения
- 24. Отображение Android PopupWindow над NativeActivity
- 25. Android - PopupWindow выше определенного вида
- 26. Android - Рассчитайте левую часть PopupWindow
- 27. Android PopupWindow window focus/selection
- 28. Как запустить popupwindow из службы в Android?
- 29. Android: Как перетащить (переместить) PopupWindow?
- 30. Android 4.1+ PopupWindow Simplest Пример
Просмотреть контейнер = (Просмотреть) popUp.getContentView(). GetRootView(); Это работает для до и после М. Проверено в желе и зефире. – Sanju
Это сбой в симуляторе Нуга: 'com.android.launcher3 W/OpenGLRenderer: Неверно названный buildLayer в представлении: ShortcutAndWidgetContainer, уничтожающий слой ...'. Во всяком случае, код просто не устраивает меня со мной, это переменное количество жестко закодированных 'getParent()' s - не кажется перспективным. – HughHughTeotl
Неправильная строка. Он должен быть p.flags | = WindowManager.LayoutParams.FLAG_DIM_BEHIND; // добавляем флаг вместо вместо других. –