开源库【CustomPopupWindow】---想怎么弹就怎么弹
来源:互联网 发布:linux ssh1 ssh2 编辑:程序博客网 时间:2024/04/29 07:55
最近对PopupWindow封装了一个库,先看一下demo演示:
效果说明
提供了六种不同的弹出方式,后面会有详细说明
默认给弹出view加上了灰色背景,but背景位置不支持更改。
弹出view默认在灰色背景中的正中间,也可以自己设置,并可微调
可设置弹出和消失style,如动画效果
- 点击灰色背景外和背景中非view区弹窗都会消失
技术分析
- 将传入的view作为子view放入一个灰色的父view(FrameLayout)中
frameLayout.removeAllViews();frameLayout.addView(contentView, new ViewGroup.LayoutParams(width, height));
- 获取目标view的位置,结合想实现的效果,就可以确定父view(FrameLayout)的位置
int[] location = new int[2];parentView.getLocationOnScreen(location);
- 确定传入的view在父view中的位置:
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) contentView.getLayoutParams();tryClearGravity();hasSetGravity = false;lp.gravity = gravity;if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) { lp.rightMargin = -xOff;} else { lp.leftMargin = xOff;}if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) { lp.bottomMargin = -yOff;} else { lp.topMargin = yOff;}contentView.setLayoutParams(lp);
- 最后用
PopupWindow
的showAsDropDown
或showAtLocation
方法显示弹窗。
popupWindow.showAsDropDown(parentView, 0, 0);
或者
popupWindow.showAtLocation(parentView, Gravity.NO_GRAVITY, location[0], location[1] - popupWindow.getHeight());
库使用方法
1. 在项目的build.gradle
文件最后添加:
allprojects { repositories { ... maven { url "https://jitpack.io" } }}
2. 在module
的build.gradle
文件中添加:
dependencies { compile 'com.github.Sbingo:CustomPopupWindow:v1.0.0' }
3. 开始使用
新建
CustomPopupWindow
对象customPopupWindow = new CustomPopupWindow(PopupWindowActivity.this);
创建要弹出的view
popupTestView = new PopupTestView(PopupWindowActivity.this);
- 弹出view(共有6种方式,这里只写一种作为示例)
customPopupWindow.showOnBottom(v, popupTestView, 0, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0, 100);
可选配置
- 设置弹窗消失的监听器
customPopupWindow.setDismissListener(new CustomPopupWindow.DismissCallBack() { @Override public void dismissCallBack() { /** do sth you like here */ }});
- 设置弹出view在灰色背景中的位置(默认在正中间)
customPopupWindow.setGravity(Gravity.BOTTOM | Gravity.RIGHT);
可以同时结合各方法中的偏移进行微调。
设置弹出和消失style
对应于每个show()方法中的style参数,详见下面的说明
方法参数说明
以 showOnBottom(View parentView, View contentView, int style, int width, int height, int xOff, int yOff)
方法为例,它的作用是在目标view下方弹出view,参数说明:
parentView
用于确定弹出位置或(和)获取
windowToken
的view,最好传入目标view。contentView
弹出的view,在演示中为灰色背景中的白色区域。
style
弹出和消失时的效果,-1时默认效果,0时无效果,也可传入style资源id,可参照demo。
width
弹出view的宽度,可以是
ViewGroup.LayoutParams.WRAP_CONTENT
、ViewGroup.LayoutParams.MATCH_PARENT
、
或者固定像素大小height
弹出view的高度,可以是
ViewGroup.LayoutParams.WRAP_CONTENT
、ViewGroup.LayoutParams.MATCH_PARENT
、
或者固定像素大小xOff
弹出view在灰色背景中的水平偏移
yOff
弹出view在灰色背景中的竖直偏移
其余还有5个方法,分别是: showOnTop
、showOnLeft
、showOnRight
、showOnScreenBottom
、showFullScreen
,
相信看了名字就知道它们的作用,各参数的意义也和上面的说明一样。
源码和demo在这里
如果觉得有用,不妨顺手点个Star,谢谢。
- 开源库【CustomPopupWindow】---想怎么弹就怎么弹
- iOS 想怎么转就怎么转
- 怎么想就怎么做,何必逼自己
- 代码不是怎么想就怎么写的
- iOS Orientation, 想怎么转就怎么转
- Pytorch在Ubuntu下想怎么装就怎么装
- 怎么就这么多痘痘呢
- 怎么就溢出了?
- 怎么就不能用啊
- Google中国怎么就不行了?
- 差别怎么就这么大
- 怎么就成了这样
- 怎么就不可以了
- 怎么就可以Google了?
- 手把手教你写灌水机器,全智能自己定,,想怎么灌就怎么灌~
- C++中私有变量的值想怎么改就怎么改
- My97DatePicker日期控件,强大的日期控件,想怎么控制时间就怎么控制
- css抖动(想怎么抖就怎么抖)很好玩哦
- 【NOIP模拟题】【数学归纳法】【卡特兰数】【快速幂】【费马小定理】【逆元】2011.11.12第一题题解
- 跨平台APP开发初识
- Linux系统磁盘分区
- Android6.0新特性 运行时权限
- linux系统下使用Xen安装半虚拟化xen客户机(paravirtualized Xen guest)
- 开源库【CustomPopupWindow】---想怎么弹就怎么弹
- 图的存储结构
- POJ 3070 (矩阵快速幂,矩阵快速幂求斐波那契)
- U-boot各种配置 和U-boot源码最为详细的讲解
- Android之隐藏标题栏
- Spring容器的继承
- Highways
- 欢迎使用CSDN-markdown编辑器
- cocoapods的安装