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 无法实现您想要的效果。

一种可能的解决方法是在导航打开和关闭时隐藏和显示弹出窗口。这是回调:

https://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html#ondrawerstatechanged

或者您可以自己添加一个视图作为弹出窗口并注意定位和引力。

最后但同样重要的是,检查这些库,因为它们可能有您想要的。它们与视图一起工作,因此您可以按照自己的方式管理它。

https://github.com/sephiroth74/android-target-tooltip

https://github.com/tomergoldst/tooltips