版权声明:本文为xing_star原创文章,转载请注明出处!html
本文同步自http://javaexception.com/archives/109java
背景描述
最近一段时间,又看到了这个开源项目BasePopup,记得最先关注这个项目仍是17年,看了下commit的提交记录,做者从16年开始维护到19年,仍是颇有毅力的,看issue以及文档以为做者挺用心的,为做者点赞。作Android开发不少年了,貌似关于PopWindow的使用却是不是特别的多,之前弹窗的技术实现基本上用的是DialogFragment,自定义一个BaseDialogFragment,约定一些方法,最终子类扩展实现,基本上知足了绝大多数的弹窗需求,不管是底部弹窗,中间弹窗,全屏弹窗仍是什么其余的,有些能够使用AlertDialog等之类的实现,popWindow的使用真的不多碰到,最近接触的几个项目,却是使用Popwindow的地方比较多,固然按理说这些弹窗也能够用Dialog或者是DialogFragment实现,不过项目已经采用了PopWindow的方式,那就尽可能保持统一的技术实现。git
PopWindow的使用场景
通常来讲,包含用来作条件筛选,好比美团上的多级条件筛选,或者是其余app上的条件筛选,仿BootomSheet底部弹出的效果(用Dialog,PopWindow均可以实现),仿朋友圈评论点赞的PopWindow效果,仿AlertDialog弹出类的PopWindow(这种既然系统提供了,那就用系统的,就不须要本身在自定义PopWindow实现这种效果),以及有动画渐变渐进式效果的弹窗效果,好比QQ空间里面的那个点击弹框,基本上用PopWindow也能够实现绝大多数的弹窗需求(可能你会碰到不少坑,因此这里仍是得借助下BasePopup),PopWindow有一大优点,就是能够细粒度的控制弹窗的显示位置,好比当前view的上下左右方位等,或者是稍微偏移点,都是可行的。这一点是Dialog,或者是DialogFragment没法比的。github
使用默认的PopWindow会碰到的问题
相信你在用PopWindow过程当中碰到了很多问题,这里咱们列举几个常见的问题。app
1. 设置主布局根节点大小无效(layout_width, layout_height),这种状况下咱们须要给根节点再加一层父容器,让父容器成为xml根节点布局
2.Android N以上设备popWindow显示有问题,以及存在阴影覆盖问题等,这种看这篇描述的http://javaexception.com/archives/108动画
3.使用window测量,控制大小,测量的宽高都是0url
4. 以及诸多更多的细节点,不一一举例了spa
BasePopup的demo效果
依次是底部弹窗,popWindow支持输入法输入文本,仿朋友圈点赞评论效果xml
demo apk体验地址为https://fir.im/pfc9
项目使用
想要使用BasePopup直接到对应的github上按照对应的文档接入,教程写的很详细,有问题也能够在issue里面查找,再贴一下项目地址https://github.com/razerdp/BasePopup。
参考资料
popupWindow使用常见的错误 https://www.jianshu.com/p/d352847cc08b
BasePopup项目地址 https://github.com/razerdp/BasePopup