android的popuwindow,是window系列控件中的一种,作用是用来弹出一个他弹出框,与对话框不同,因为他是用来“提醒”的,而且是悬浮在当前activity之上的
在使用上,popuwindow与dialog迥异的是:popuwindow必须设置他的长度,宽度,才可以显示出来
最简单的代码
这样我们就可以显示出来了,为了简单点,能看出来,我把在popuwindow的布局文件中,把他设置成为黑色的
效果图:
由于我曾看过一篇博客,说是显示在左下角,所以这里上三张图片
。。。不会弄图。。大家随意。看图片,看得出来,不是显示在左下角的,(设置大小为wrap——content)
popupwindow设置大小、位置设置:
个人觉得popupwindow一直放在那儿,好难看。怎么调节位置?
不着急。先设置他的大小。前面是使用layoutparams去设置,现在。我们可以使用popupwindow的一个构造方法:
//也可以直接设置大小
// popuwindow=new PopupWindow(view,100,100);
这样简单粗暴,然后就回到设置位置上;设置parameter?
这时候看到了这么一个函数:
public void showAsDropDown(View anchor, int xoff, int yoff) {
showAsDropDown(anchor, xoff, yoff, DEFAULT_ANCHORED_GRAVITY);
}
没错!就是showasdropdown这个函数,可以用来设置popupwindow的位置,
什么是xoff,标准在哪儿?测试了几次,发现:
xoff,yoff基于anchor的左下角进行偏移。
而上兼顾到上面提及的两个方面。popupwindow就可以实现了,但是,此时的它却是会一直显示着
这时候要让他消失,需要调用到dismiss函数,但是直接调用,是会直接消失。顶多让手机卡顿一下,使用者却不知道popupwindow出现过
这时,调用下view里那个按钮,给他添加下点击事件
这时候点击下确定按钮,那么他就消失了
那么怎么让我们点击外部时候。popupwindow也能消失呢?这是有人想到了popupwindow的setoutside方法,但是很遗憾
其实这个方法时设置popupWindow以外的区域可以相应触摸事件,比如我们重写了触摸事件去做一些别的操作
而且查看api,没看到明显的方法(我是没看到,有看到的麻烦指点一下)
是时候百度一波了,百度过后,发现这么一句话:
需要顺利让PopUpWindow dimiss(即点击PopuWindow之外的地方此或者back键PopuWindow会消失);PopUpWindow的背景不能为空。必须在popuWindow.showAsDropDown(v);或者其它的显示PopuWindow方法之前设置它的背景不为空
所以,代码中增添了这么几句:
这样设置过后,我们的外部点击事件就可以执行了,到最后,大家肯定都注意到了我设置的button2.外部点击按钮,测试过后,会发现不设置outside的话,点击外部点击事件的话,button的点击事件依旧会实现。若是想让他在几秒后自动消失,很抱歉,dismiss的函数类别是void的,需要用handle去设置
最后上全部代码: