我们都知道,Android 中的弹窗基本有两种,一种是AlertDialog,另一种是PopupWindow,AlertDialog的显示位置是固定的,PopWindow 的显示位置是我们可以设置和调整的,因此,像项目中的一些场景如:某个功能的提示说明、点击按钮在按钮上方或者下方弹出菜单、新功能弹窗引导等。由于这些弹窗的位置不固定,因此都可以用PopupWindow来做。最近项目中也用到了PopupWindow弹窗功能,在写的过程中,发现虽然API比较简单,但是写一个PopupWindow,还是有点繁琐,很多重复代码,决定简单封装一下,以后添加一个弹窗就不用那么麻烦了,几行代码就搞定了。本篇文章是对项目中使用 PopupWindow做一个笔记和总结。
一、首先先看一下效果图
效果图:
以上示例展示了4中PopupWindow 使用场景
Github地址:CustomWindow
二、PopupWindow 简单介绍
首先看一下Google 官方文档对PopupWindow的介绍:
This class represents a popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity.
大致意思就是:popup window 是一个出现在当前Activity顶层的悬浮容器,可以用来展示任意的View。
因此只要是个View,都可以用PopupWindow 来展示。这里我就不过多介绍PopupWindow 的API,挑几个重要并且常用的说一下:
1,构造函数,这个不用多说,多个重载函数,穿不同的参数。
public PopupWindow(int width, int height)
public PopupWindow(View contentView, int width, int height)
public PopupWindow(View contentView, int width, int height, boolean focusable)
2,设置显示的View:
public void setContentView(View contentView)
3,设置展示的宽、高,构造函数传了宽高就不用重新设置
// 设置宽,其实构造函数也是调用的这个方法
public void setWidth(int width)
//设置高
public void setHeight(int height)
4,设置是否获取焦点
public void setFocusable(boolean focusable)
5,设置点击PopupWindow 以外区域是否可以隐藏PopupWindow
public void setOutsideTouchable(boolean touchable)
注意:这里要注意一下,有时侯我们希望触摸PopupWindow 以外区域就隐藏PopupWindow,理论上我们只需要调用 setOutsideTouchable(ture)设置为ture就可以了,但是实际上只设置这个属性是不行的,必须设置背景,也就是说要和setBackgroundDrawable(Drawable background)同时使用才有效,不然,点击PopupWindow以外区域是不能隐藏掉的。
6,隐藏PopupWindow
public void dismiss()