Android常见View之PopupWindow精解

3 篇文章 0 订阅
2 篇文章 0 订阅

当我在总结一些知识点的时候,我的心情是有些复杂。我不知道总结的这个知识点对于别人的意义有多大,还只是用于我在开发遇到困惑的时候提供参考的模块。随着开发年限的增长,阅历的增长,以及对整个互联网趋势的把握,我对程序员存在的意义以及存在的方式有了新的见解。其实,程序员磊代码,就像语文中的写作文一样,甚至要比写作文要简单的多。同样是通过一段文字或编码来实现一个功能,表达一个含义,如果我们有大量的语言、段落或框架积累,就很容易组织一篇精美的文章。所以这也是我的一个方向,我要把我所掌握的可复用的框架、View、工具类累积到一个项目中,在以后项目需要的时候,只需要取出来进行定制型填充。我甚至要完成一些在各个方面有代表意义的项目,一方面的锻炼了自己的能力,一方面是为了以后的创业做准备。后来,我会写下项目的github地址,希望遇到志同道合的人。

一、PopupWindow与AlertDialog的区别

PopupWindow与AlertDialog都是对话框,最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以通过指定的锚点或父布局指定显示位置的,随便哪个位置都可以,更加灵活。

二、PopupWindow的常用方法

1.构造方法

  //方法一:  
public PopupWindow (Context context)  
//方法二:  
public PopupWindow(View contentView)  
//方法三:  
public PopupWindow(View contentView, int width, int height)  
//方法四:  
public PopupWindow(View contentView, int width, int height, boolean focusable) 

PopupWindow有四个构造方法,方法三最常用。因为PopupWindow没有默认的布局文件,所以必须强制设置contentView设置布局。因为PopupWindow没有根布局,所以必须要设置PopupWindow的width和height,确定PopupWindow的大小。虽然在Layout布局文件中我们会设置PopupWindow的width和height,但是必须要在java文件中重写,所以Layout文件最外层的布局是不起作用的,所以要在layout文件最外层在包裹一层布局,这样才不会影响你的布局显示。

2.重要方法

//相对某个控件的位置(正左下方),无偏移  
showAsDropDown(View anchor):  
//相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;  
showAsDropDown(View anchor, int xoff, int yoff):  
//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移  
showAtLocation(View parent, int gravity, int x, int y);
public void dismiss()  
    //另外几个函数,这里不讲其意义,下篇细讲  
public void setFocusable(boolean focusable)  
public void setTouchable(boolean touchable)  
public void setOutsideTouchable(boolean touchable)  
public void setBackgroundDrawable(Drawable background)  
  1. showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移 。这里对正在下方的概念进行解释,就是anchor控件的左下角和PopupWindow的右上角重合,但是布局空间不足的情况除外。具体请看图解。图1属于正常情况,图2属于空间不足的情况,PopupWindow便不遵循该规则,找寻合适的位置显示完整。
    这里写图片描述

  2. 列表内容

  3. 列表内容
  4. 列表内容
  5. 列表内容
  6. 列表内容
  7. 列表内容
  8. 列表内容
  9. 列表内容
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值