Android PopWindow的替代品BasePopup
版权声明:本文为xing_star原创文章,转载请注明出处!
本文同步自
背景描述
最近一段时间,又看到了这个开源项目basepopup,记得最早关注这个项目还是17年,看了下commit的提交记录,作者从16年开始维护到19年,还是很有毅力的,看issue以及文档觉得作者挺用心的,为作者点赞。做android开发很多年了,貌似关于popwindow的使用倒是不是特别的多,以前弹窗的技术实现基本上用的是dialogfragment,自定义一个basedialogfragment,约定一些方法,最终子类扩展实现,基本上满足了绝大多数的弹窗需求,无论是底部弹窗,中间弹窗,全屏弹窗还是什么其他的,有些可以使用alertdialog等之类的实现,popwindow的使用真的很少碰到,最近接触的几个项目,倒是使用popwindow的地方比较多,当然按理说这些弹窗也可以用dialog或者是dialogfragment实现,不过项目已经采用了popwindow的方式,那就尽量保持统一的技术实现。
popwindow的使用场景
一般来说,包含用来做条件筛选,比如美团上的多级条件筛选,或者是其他app上的条件筛选,仿bootomsheet底部弹出的效果(用dialog,popwindow都可以实现),仿朋友圈评论点赞的popwindow效果,仿alertdialog弹出类的popwindow(这种既然系统提供了,那就用系统的,就不需要自己在自定义popwindow实现这种效果),以及有动画渐变渐进式效果的弹窗效果,比如qq空间里面的那个点击弹框,基本上用popwindow也可以实现绝大多数的弹窗需求(可能你会碰到很多坑,所以这里还是得借助下basepopup),popwindow有一大优势,就是可以细粒度的控制弹窗的显示位置,比如当前view的上下左右方位等,或者是稍微偏移点,都是可行的。这一点是dialog,或者是dialogfragment无法比的。
使用默认的popwindow会碰到的问题
相信你在用popwindow过程中碰到了不少问题,这里我们列举几个常见的问题。
1. 设置主布局根节点大小无效(layout_width, layout_height),这种情况下我们需要给根节点再加一层父容器,让父容器成为xml根节点
2.android n以上设备popwindow显示有问题,以及存在阴影覆盖问题等,这种看这篇描述的
3.使用window测量,控制大小,测量的宽高都是0
4. 以及诸多更多的细节点,不一一举例了
basepopup的demo效果
依次是底部弹窗,popwindow支持输入法输入文本,仿朋友圈点赞评论效果
demo apk体验地址为
项目使用
想要使用basepopup直接到对应的github上按照对应的文档接入,教程写的很详细,有问题也可以在issue里面查找,再贴一下项目地址https://github.com/razerdp/basepopup。
参考资料
popupwindow使用常见的错误
basepopup项目地址 https://github.com/razerdp/basepopup
下一篇: java基础第五篇封装与面向对象