您的位置:首页 > 运维架构

PopupWindow思路和显示方式的详解

2015-12-16 14:53 323 查看
        记录啊,记录

 

        如果你熟悉AlertDialog的使用,那么PopupWindow也就可以轻车熟路了,它们在有些方面是很相似甚至想通的。

 

        步骤顺序:

        1.声明一个PopupWindow对象。

        2.获取一个布局layout(通常是View对象),大多是通过inflater拿到的(和自定义Adapter中的getView()有99%的相像)。

        3.初始化1的对象,初始化时需要传入一个变量,这个变量一般是一个布局文件也就是2得到的layout,里面包含需求的布局控件等,构造方法有好几个按需要选择吧。

        可以:xxxx= new  PopupWindow(layout);

        也可以:xxxx = new PopupWindow(layout);xxxx.setContentView(view);

 

        4.根据2的layout获取内部控件,并对内部控件设置监听事件等相关操作(这一步可以在3的前面,无所谓的)。

        5.为了设置点击PopupWindow以外的区域,要设置两个属性:

        xxxx.setBackgroundDrawable(yyyyy) 
        这个yyyyy是布局的背景的一个Drawable对象,例如getResources().getDrawable( R.drawable.bg_popupwindow);还可以是一个空new BitmapDrawable()对象;
        xxxx.setOutsideTouchable(true);
        触摸popupwindow外部,popupwindow消失。这个要求你的popupwindow要有背景图片才可以成功
        6.有EditText这类需要焦点的控件是要设置如下属性:

          
xxxx.setFocusable(true);

        7.在触发事件中显示PopupWindow:

        大致是两种:

        ①showAsDropDowm(anchor, xoff, yoff,gravity):相对于控件显示。这个函数最多四个参数(第四个API19加的,没试过,忽略掉);第一个是显示的依托的坐标,它是一个控件,接下来的两个偏移量是根据该控件的左下为原点开始计算的,要注意的是向下的Y轴为正数,这点和平常的数学不一样。另外两个就是x轴和y轴对应的偏移量了,单位似乎是px,所以有时候需要换算dp;

        ②showAtLocation(anchor,gravity, xoff, yoff)相对于整个窗口显示。参数和上面一个基本差不多但是他们的作用其实是不一样的,这里的anchor是作为一个获取其最外边窗口Token(什么是Token?我也不知道)的工具,不依据它来计算,也就是说,这个anchor只要是窗口内的控件就可以;gravity就是在窗口中的位置,剩余两个和上面讲的一样,是两个偏移量。

        8.取消PopupWindow:

        xxxx.dismiss();

 

        关于AlertDialog和PopupWindow的区别,网上都说是什么Alert是非阻塞的,就是说Alert显示时后台还可以做事情;pop是阻塞的,pop显示时后台是暂停的;

        其实对于一般人来说,他们最主要的区别是AlertDialog基本只能显示在正中间,而PopupWindow更加灵活,容易定制一些。

 

        到了这里应该粘贴一段代码的,但是我项目里的不想粘,又懒得新写一个,你可以对照别人的代码,参考这里的思路(如果你觉得思路对你有用的话);

        BY:SHAREYE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: