版權聲明:本文爲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