我可以使用PopupWindow而不是对话框调暗背景吗?我在问这是因为我使用的是对话框,但对话框不显示在单击的项目下方,而且使用PopupWindow,我已经在项目下方显示了弹出窗口。在Android中使用PopupWindow调暗背景
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);
}
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进行测试。改编曹军岳的解决方案:
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. 如何调暗PopupWindow的背景?
- 2. Android变暗背景
- 3. 在Android中制作背景昏暗
- 4. PopupWindow的变暗背景不包括工具栏/动作条
- 5. 将reveal.js中的背景图像调暗
- 6. 在iPad上使用UIActionSheet时调暗并锁定背景
- 7. Android getWindow()在尝试调暗活动背景时undefined
- 8. Javafx变暗背景
- 9. 围绕视图调暗背景
- 10. 可可触摸调光背景较暗
- 11. 黑暗背景的Android股票主题
- 12. 昏暗的Android的活动的背景
- 13. 加载动画期间变暗/昏暗的背景元素 - Android
- 14. 变暗CSS背景图像
- 15. iphone开发:背景较暗
- 16. Javascript变暗背景颜色
- 17. 变暗CSS背景图片?
- 18. 背景暗淡不正常
- 19. 在ASP中使用ModalPopupExtender后退出/变暗背景
- 20. 不可能在IE中使用黑暗的背景?
- 21. 按键采用透明背景变暗在棒棒糖的Android
- 22. 当在Android中打开片段时昏暗的完整背景
- 23. 使用PopupWindow在android系统
- 24. CollapsingToolbarLayout - 使背景图像变暗/模糊
- 25. 背景透明和前景较暗
- 26. Android调用背景中的活动
- 27. 的Android微调用在深色背景
- 28. 活动中暗淡或模糊背景
- 29. 添加的UIView在暗淡的背景
- 30. 如何在Android中调整PopupWindow宽度
查看容器=(查看)popUp.getContentView()。getRootView(); 这适用于前和后M.检入果冻豆和棉花糖。 – Sanju
这在Nougat模拟器中崩溃:'com.android.launcher3 W/OpenGLRenderer:错误地在View上调用buildLayer:ShortcutAndWidgetContainer,销毁图层...'。无论如何,代码并不能很好地适应我,可变数量的硬编码getParent() - 似乎并不是未来的保证。 – HughHughTeotl
有一条线不正确。它应该是 p.flags | = WindowManager.LayoutParams.FLAG_DIM_BEHIND; //在这里添加一个标志而不是清除其他标志 –