Android PopWindow的替代品BasePopup


版權聲明:本文為xing_star原創文章,轉載請注明出處!

本文同步自http://javaexception.com/archives/109

背景描述

最近一段時間,又看到了這個開源項目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顯示有問題,以及存在陰影覆蓋問題等,這種看這篇描述的http://javaexception.com/archives/108

3.使用window測量,控制大小,測量的寬高都是0

4. 以及諸多更多的細節點,不一一舉例了

BasePopup的demo效果

依次是底部彈窗,popWindow支持輸入法輸入文本,仿朋友圈點贊評論效果

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM