PopupWindow 与 Navigation Drawer 重叠
PopupWindow overlaps Navigation Drawer
目前我的弹出窗口与其他视图重叠。 setElevation(0)
没有任何改变。 setOverlapAnchor(false)
和 setAttachedInDecor(true)
也没什么用。下面是我使用的代码。我需要弹出窗口位于导航抽屉
private fun showPopup(anchorView: View) {
PopupWindow(
LayoutInflater.from(activity).inflate(
R.layout.popup_layout,
null
),
100,
100,
false
)
.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view?.elevation = 0f
contentView.elevation = 0f
elevation = 0f
}
isTouchable = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
isAttachedInDecor = true
}
PopupWindowCompat.setOverlapAnchor(this, false)
PopupWindowCompat.showAsDropDown(this, anchorView, 0, 0, Gravity.NO_GRAVITY)
}
}
PopupWindow 是一个window。您的导航抽屉位于另一个具有自己的视图层次结构的 window 上。
是这样的:
-- activity
---- window1
------ viewhierarchy
--------NavigationDrawer
---- window2
------ popup
使用 PopupWindow 无法实现您想要的效果。
一种可能的解决方法是在导航打开和关闭时隐藏和显示弹出窗口。这是回调:
或者您可以自己添加一个视图作为弹出窗口并注意定位和引力。
最后但同样重要的是,检查这些库,因为它们可能有您想要的。它们与视图一起工作,因此您可以按照自己的方式管理它。
目前我的弹出窗口与其他视图重叠。 setElevation(0)
没有任何改变。 setOverlapAnchor(false)
和 setAttachedInDecor(true)
也没什么用。下面是我使用的代码。我需要弹出窗口位于导航抽屉
private fun showPopup(anchorView: View) {
PopupWindow(
LayoutInflater.from(activity).inflate(
R.layout.popup_layout,
null
),
100,
100,
false
)
.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view?.elevation = 0f
contentView.elevation = 0f
elevation = 0f
}
isTouchable = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
isAttachedInDecor = true
}
PopupWindowCompat.setOverlapAnchor(this, false)
PopupWindowCompat.showAsDropDown(this, anchorView, 0, 0, Gravity.NO_GRAVITY)
}
}
PopupWindow 是一个window。您的导航抽屉位于另一个具有自己的视图层次结构的 window 上。
是这样的:
-- activity
---- window1
------ viewhierarchy
--------NavigationDrawer
---- window2
------ popup
使用 PopupWindow 无法实现您想要的效果。
一种可能的解决方法是在导航打开和关闭时隐藏和显示弹出窗口。这是回调:
或者您可以自己添加一个视图作为弹出窗口并注意定位和引力。
最后但同样重要的是,检查这些库,因为它们可能有您想要的。它们与视图一起工作,因此您可以按照自己的方式管理它。