(转)Android开发技术学习之popupwindow的弹窗实现
来源:互联网 发布:淘宝店铺怎么升钻 编辑:程序博客网 时间:2024/06/04 19:30
原地址:http://blog.csdn.net/csdnzouqi/article/details/51433633
好久没有写博客了,今天给大家写点东西。最近有个需求是需要实现popupwindow的弹窗功能。就是大家常见的qq,微信,钉钉等有的功能。如下图所示:
如上图所示,三个我用的比较多的软件,都会有这个功能。废话不多说,下面来给大家讲讲具体的实现方法吧!该demo实现的效果与钉钉的较为相似,在这里给大家讲一些需要用到的知识点,这样下次再做这个功能的时候自己就可以很快的实现了,甚至还能加上一些你自己需要的炫酷效果。多学习点东西,保持好奇心很重要。
按钮的布局文件的代码很简单,不给大家贴出来了。
由于需要在代码中构建popupwindow的布局,所以这里先新建一个布局文件供构建布局时传入参数用。这里命名为popupwindow.xml。布局文件如下所示:
代码如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
代码中divider属性设置为null是用于去掉item之间的分割线。像钉钉的popupwindow一样。
4.我往popupwindow.xml的布局中给线性布局设置了一个background属性,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
目的是为了要使popupwindow的边框与周围有一定的明显对比。使效果更加的好看一些。
这个背景的设置用到了自定义的drawable。我给它命名为popupwindow_bg.xml,布局文件如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
在该xml资源下,stroke用来定义边框,corners用来定义四周的圆角。其中的属性代表的意思我都在代码中给出了注释,这里不过多说明了。将popupwindow.xml的布局背景设置好了以后就可以开始在MainActivity中写代码了。如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
这里给出的代码中写的注释很详细,但是有几点需要大家注意,当你点击popupwindow以外的区域时要想使其消失,你不仅需要设置属性:window.setOutsideTouchable(true);
你还需要设置属性:
window.setBackgroundDrawable(Drawable background);
只有同时都设置了以上属性,你点击popupwindow以外的区域时该popupwindow才会消失。没有同时设置以上两个属性的话就不会起作用,大家可以亲自试一试。
window.setFocusable(true);方法是为了使popupwindow可以获取焦点,这样当你点击返回按钮的时候就不会立即退出Activity了,而只是使popupwindow消失不见。
如果不设置的话,点击返回按钮就直接退出该Activity了,大家试一试便知。
还有一个重要的方法不能忘记了,就是window.update();方法。用于实时的更新状态,很关键,别忘记写上。
最后需要以下拉的方式显示,调用方法即可:
window.showAsDropDown(btnPopup, 0, 20);
5.在MainActivity中还设置了一个动画属性。如下图所示:
这里用到了样式,所以需要在styles中添加样式:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
以上的样式是一个popupwindow的弹出和消失的动画。
显然,我还引用了两个动画xml文件。一个是in.xml用于显示popupwindow的弹出时候的动画,一个是out.xml用于显示popupwindow消失时候的动画。
这需要在res目录下新建一个anim文件夹,里面创建上面提到的两个资源文件in.xml和out.xml。
文件如下:
in.xml:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
很简单,透明度由透明渐渐的显示,持续时间1秒。
out.xml:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
很简单,透明度渐渐的变化直至popupwindow消失,持续时间也是1秒。
好了,代码就讲到这里了。下面给大家演示一下效果图,都是截图,请见谅:
popupwindow渐渐显示:
popupwindow完全显示:
点击以外的区域popupwindow消失不见:
DEMO的下载链接在这里:
http://download.csdn.net/detail/csdnzouqi/9522616
在这里说一句:不管用的是什么工具写项目,写demo,技术是不变的,掌握了技术,用不同的开发工具其实都一样,只是个人习惯而已。不否认android studio越做越好了。嘿嘿!
- Android开发技术学习之popupwindow的弹窗实现
- Android开发技术学习之popupwindow的弹窗实现
- (转)Android开发技术学习之popupwindow的弹窗实现
- Android开发之PopupWindow
- Android开发之PopupWindow
- Android开发之PopupWindow
- Android开发之PopupWindow
- Android开发之PopupWindow
- Android 开发之PopupWindow
- Android开发之PopupWindow
- Android开发之 popupwindow
- Android开发之带阴影的PopupWindow
- Android 开发之通用的 PopupWindow
- android学习之popupWindow
- Android学习之PopupWindow
- Android学习之PopupWindow
- android之弹窗popupWindow
- 【android开发】手机应用管理器的实现之实现popupWindow类对话框(二)
- 两个互联网公司的创业故事
- Class.forName蹊跷的错误,及修改方式
- Windows 2008 R2 配置 DNS 实现二级域名
- Android JNI 自己遇到的问题记录
- db2并列排序
- (转)Android开发技术学习之popupwindow的弹窗实现
- Integer的highestOneBit方法源码解析
- TensorFlow实现 mnist分类
- WebView爬坑之旅1--腾讯x5内核(tbs)
- 设计模式——抽象工厂模式
- TP框架中的自动验证功能$_validate
- Tomcat在阿里云上启动慢的解决办法
- Linux screen capture
- Kafka Security Mechanism (SASL/PLAIN)