PopupWindows多坑,不赘述了,无意中发现一个专讲这个的博客http://www.cnblogs.com/popfisher/p/5944054.html
先讲讲我遇到的需求------条件选择,并实现选择按钮顶部悬浮效果、列表可滑动,实现1、2、3级列表。
思来想去摒弃了选择按钮和listview封装在一起的那种,列表改用popupwindows实现。(不要问我为啥,因为技术有限,只想到了pop实现:炫富并且滑动不被外层srcrollview抵消)
悬浮我用的CoordinatorLayout +NestedScrollView +AppBarLayout
多级条件选择: ExpandMenuView条件筛选
SingleListFilterView 1级列表
ThereListFilterView 2级列表
DoubleListFilterView 3级列表
Popupwindow –封装在ExpandMenuView,用来显示列表
下面讲讲我遇到的问题:
1.appBarLayout.setExpanded(false);实现点击筛选按钮的时候,将ExpandMenuView悬浮起来,这个时候Popupwindow却因为提前获取了焦点,怎么也无法显示在ExpandMenuView下方。
解决办法:因为Popupwindow注定要显示在ExpandMenuView下方,并且ExpandMenuView注定要在顶部显示,这是我的需求。我弄了一个textview始终显示在ExpandMenuView要悬浮的位置。改Popupwindow不再追随ExpandMenuView的脚步显示,而是追随textview的脚步显示,最终实现了想要的效果。
2.我想要Popupwindow下面变成遮罩效果,而不要盖住上面的ExpandMenuView。
解决办法:Popupwindow的最底层布局设置一个透明度,而不是设置windows的透明度。如果你还没实现想要的效果,说明那还不是pop的最底层布局。这个时候,如果你想控制列表的显示高度,只在这块滚动,那么在xml中设置listview的高度就成。
3.Popupwindow的showAsDropDown的方法。让pop有时显示在上面,有时显示在下面,体验不好。
解决办法:ppwfilter.showAsDropDown(parent, xoff, yoff, gravity)//parent:传你当前Layout的id; gravity:Gravity.BOTTOM(以屏幕左下角为参照)... 偏移量会以它为基准点 当x y为0,0是出现在底部居中
api19及其以上才有这个办法。把minSdkVersion改了。
其中不足,欢迎大家指正。
代码地址:https://github.com/BoloPie/MyApplication
网友评论