如何封装一个通用的PopupWindow
来源:互联网 发布:淘宝固本安宫止血汤 编辑:程序博客网 时间:2024/06/12 14:43
PopupWindow 这个类用来实现一个弹出框,可以使用任意布局的 View 作为其内容,这个弹出框是悬浮在当前 activity 之上的。
一般 PopupWindow 的使用:
上面就是 PopupWindow 通常需要设置的各个方法,不难,但是稍微有点繁琐,有些是可以复用的,所以封装了一个通用的 CommonPopupWindow:
CommonPopupWindow 继承自 PopupWindow,拥有 PopupWindow 的各个属性方法,使用类似建造者模式,和 AlertDialog 的使用方式差不多,CommonPopupWindow 使用举例:
CommonPopupWindow 设置背景
这里使用的是 WindowManager.LayoutParams.alpha 属性,看下官网解释:An alpha value to apply to this entire window. An alpha of 1.0 means fully opaque and 0.0 means fully transparent .
alpha 值适用于整个 Window,α 为 1.0 时表示完全不透明而0.0表示完全透明,默认是1.0,当 PopupWindow 弹出时通过设置 alpha 在(0.0,1.0)之间设置灰色背景,当 PopupWindow 消失时恢复默认值。
计算 CommonPopupWindow 宽高
注:在测量宽高时遇到一种情况,如图所示:
如果设置 TextView 的 android:layout_width="wrap_content",那么测量不出 TextView 准确的 height,当设置 width 为某个确定值时,也能得到准确的 height 了。
CommonPopupWindow 设置动画
如设置向右动画:
.setAnimationStyle(R.style.AnimHorizontal);
在 style.xml 文件中设置:
android:windowEnterAnimation、android:windowExitAnimation 分别为 Popupwindow 弹出和消失动画
进入动画为anim目录下的 push_scale_left_in.xml:
消失动画为 push_scale_left_out.xml:
CommonPopupWindow 弹出
因为 CommonPopupWindow 继承自 PopupWindow,所以可以直接使用 PopupWindow 中的弹出方法,常用的下面三种:
其中,showAsDropDown 是显示在参照物anchor的周围,xoff、yoff 分别是X轴、Y轴的偏移量,如果不设置 xoff、yoff,默认是显示在 anchor 的下方;showAtLocation 是设置在父控件的位置,如设置 Gravity.BOTTOM 表示在父控件底部弹出,xoff、yoff 也是X轴、Y轴的偏移量。
如上面向右弹出例子,分别使用 showAsDropDown 和 showAtLocation 来实现:
showAsDropDown:
popupWindow.showAsDropDown(view, view.getWidth(), -view.getHeight());
showAsDropDown 默认展示在 button 的下面,通过改变 X轴 和 Y轴 的偏移量(X轴向右偏移 button 的宽度,Y轴向上偏移 button 的高度),实现在 Button 右边弹出。
showAtLocation:
使用了 View 的 getLocationOnScreen方法 来获得View在屏幕中的坐标位置,传入的参数必须是一个有2个整数的数组,分别代表 View 的X、Y坐标,即是 View 的左上角的坐标,这里的 View 是 Button,知道了 Button 左上角的坐标,就可以得到要展示的 PopupWindow 的左上角的坐标为 (positions[0] + view.getWidth(), positions[1]),从而实现在 Button 右边弹出。
- 如何封装一个通用的PopupWindow
- 教你如何封装一个通用的PopupWindow
- Android 封装一个通用的PopupWindow
- Android 封装一个通用的PopupWindow
- 拒绝无用功,封装一个通用的PopupWindow
- 拒绝无用功,封装一个通用的 PopupWindow
- 封装一个万能的PopupWindow
- 打造通用的PopupWindow
- 封装一个通用的 listview/gridview Adapter
- 封装一个通用的 okhttp 库
- popupwindow的封装
- popupWindow的封装使用
- 对PopupWindow的封装
- Android PopupWindow的封装使用
- 封装一个输入框通用的光标操作接口
- 使用redisTemplete简单封装的一个通用操作类
- 安卓开发 封装 一个通用 的AlertDialog,亲测好用
- 如何封装Node.js和前端通用的模块
- Linux 2.6内核Makefile浅析
- 如何在命名空间中用use引入类、方法,并创建别名
- lintcode(122)直方图最大矩形覆盖
- Android Application启动流程分析
- android有了eventbus,一切与关界面通信问题迎刃而解。
- 如何封装一个通用的PopupWindow
- uva10305- Ordering Tasks(拓扑排序)
- 从高考到程序员
- 字/字节/字长
- C#——面向对象——泛型——泛型类
- Android中DatePicker的使用
- Learning Spark笔记10-PageRank
- jQuery系列之添加元素或文本+jQ操作(六)
- Advanced Troubleshooting of CSS Heartbeat Failures