android之popupwindow使用

android之popupwindow使用

在自己练手的项目中,刚开始没有写多少,就遇到了一个尴尬的问题:我TM基础控件的用法忘记了,然后又是各种Google资料,我为什么不自己记录下来呢?下次就直接找自己的blog就行了。今天就从PopupWindow开始。

问题

在写菜鸟shop这个自己练手的项目时,在进行写Rxjava+Retrofit进行网络加载数据的时候,想到在加载的时候需要个用户一个提示框来告诉用户我在很努力的加载数据,尤其是在网络状况不理想的情况下,给用户一个好的用户体验。要实现这个效果顿时想到了PopupWindow。在下手写的时候,就尴尬了,忘记如何设置布局以及展示了,在印象中有一个show()方法。在AS中.了半天,就是没有看见show()方法。囧!!!。后面突然想到这个show()方法是Dialog的方法。哎。还是老老实实的查资料吧。

如何实例化

在Android官方文档中提供了9个构造方法,分别是:

  1. PopupWindiw(Context context)
  2. PopupWindow(Context context ,AttributeSet attrs)
  3. PopupWindow(Context context, AttributeSet attrs ,int defStyleAttr)
  4. PopupWindow(Context context, AttributeSet attrs ,int defStyleAttr,int defStyleRes)
  5. PopupWindow()
  6. PopupWindow(View contentView)
  7. PopupWindow(int width,int height)
  8. PopupWindow(View contentView,int width,int height)
  9. PopupWindow(View contentView,int width,int height,boolean focusable)

前面四个构造方法,经常自定义View的人应该会非常熟悉,这4个方是在写自定义View的时候,要求重写的构造方法(第4个可以不重写)。

剩下的构造方法在Android官方文档中都有说明。

PopupWindow() // 创建一个新的没有布局的,没有焦点的尺寸为(0,0)的PopupWindow
PopupWindow(View contentView) //创建一个新的没有焦点的展示contentView的PopupWindow
PopupWindow(int width,int height) //创建一个新的没有焦点的PopupWindow
PopupWindow(View contentView,int width,int height) //创建一个新的没有焦点的展示contentView的PopupWindow
PopupWindow(View contentView,int width,int height,boolean focusable) //创建一个新的展示contentView的PopupWindow,并且能够指定是否能有焦点

如何使用

今天暂且不讲如何设置动画的问题,动画的问题,下次再补充说明。

讲道理,应该先有一个PopupWindow的实例才能做下面的操作对吧?,我使用9个构造函数后面的5个,其实,后面的5的构造方法,能够通过PopupWindow提供的setXXX()方法来达到相同的效果。在这里我使用PopupWindow(View contentView,int widht,int height)做示例。

View popup= LayoutInflater.from(MainActivity.this).inflate(R.layout.popup_layout_1,null);
                PopupWindow popupWindow=new PopupWindow(popup, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
                popupWindow.showAtLocation(view, Gravity.CENTER,0,0);

在构造函数中的contentView代表的是要展示的PopupWindow()中的内容。也就是一个Viewwidthheight分别代表这个View的大小。这两个值需要指定,否则没有view能显示,这两个值可以是具体的大小(单位为像素),也可以用MATCH_PARENT此类进行表示。showAtLocation(View parent,int gravity,int xoff,int yoff) 用于展示构造的PopupWindowparent是用于获取Token的父控件,gravity是控制PopupWindow的展示重心 。xoffyoff表示PopupWindow的左上偏移,在这里我设置了没有偏离。

PopupWindow中我使用了简单的Progress进行填充:效果如下:

很简单!不是吗?(可是我还是忘了。)

一些等同操作

setContentView(View contentView) 该方法用于更改PopupWindow中的布局,也可以为没有设置contentViewPopupWindow设置布局。

setFocusable(boolean focusable)该方法用于更改PopupWindow中布局是否能够获取焦点。

setHegiht(int height)该方法用于更改PopupWindow的高度。

setWidth(int width)该方法用于更改PopupWindow的宽度。

showAsDropDown(View anchor)showAsDropDown(View anchor,int xoff,int yoff,int gravity)showAsDropDown(View anchor,int xoff,int yoff) 这三个方式也是用于展示PopupWindow的,但是都是相对于某个控件进行偏移展示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值