zyyoona7 / EasyPopup

「暂停维护」PopupWindow Wrapper. 对 PopupWindow 的封装。可指定相对于 anchor view 各个方位弹出,设置背景变暗,指定 ViewGroup 背景变暗等特性。
Apache License 2.0
1.54k stars 214 forks source link

想请教一个问题 #21

Closed Joslyn-Chen closed 1 year ago

Joslyn-Chen commented 6 years ago

popup里有个RecyclerView,我动态删减item,popup能自动改变高度吗?(比如饿了麽商家界面购物车)

zyyoona7 commented 6 years ago

这种情况没有试过,理论上可以实现,如果每次显示之前数据变化了可以通过设置

    /**
     * 是否需要重新获取宽高
     *
     * @param needReMeasureWH
     * @return
     */
    public T setNeedReMeasureWH(boolean needReMeasureWH) {
        this.isNeedReMeasureWH = needReMeasureWH;
        return self();
    }

这个方法来使得每次显示 PopupWindow 时重新测量一次宽高,然后显示;如果是在 PopupWindow 正在显示的时候,自动改变高度的话可以重新获取宽高然后通过 PopupWindow.update() 方法更新高度。 这个只是我暂时的思路,并没有验证过,你可以试一下~

Joslyn-Chen commented 6 years ago

@zyyoona7 貌似不行,一调用PopupWindow.update(),PopupWindow就消失了,也没有OnDismissListener回调。

zyyoona7 commented 6 years ago

@Joslyn-Chen 如果不急的话,等我有时间尝试一下~再回复你

zyyoona7 commented 6 years ago

@Joslyn-Chen 改了一下 demo,在 ComplexPopup 中尝试了一下动态删除,默认的 PopupWindow 是支持的,但是如果使用了相对位置弹窗就不行,应该是测量高度的问题,需要找一个更好的方案,待以后更新~

Joslyn-Chen commented 6 years ago

@zyyoona7 你有找到方案吗? 我发现一个方法可以勉强实现这种问题。 1、List设置setHasFixedSize(false)。 2、显示showAtLocation(anchorView,Gravity.BOTTOM,0,anchorView.getHeight() * 2-10)。 -10是根据实际减的,我测试的anchorView高为131(50dp)。

zyyoona7 commented 6 years ago

好的,我记录一下,最近有点忙,没太维护这个项目~等有时间增加适配

Joslyn-Chen commented 6 years ago

@zyyoona7 修改一下, 2、显示showAtLocation(anchorView,Gravity.BOTTOM,0,anchorView.getHeight() +backHeight)。 backHeight是虚拟键高度。 这样如果加了阴影会遮挡底部的anchorView。