弹窗显示
老样子
我们实现PopupWindow只需在Button这个Click中实现就ok了
我们发现PopupWindow可以直接new一个对象,然后通过对象一个一个.set等等也可以慢慢设置
我们ctrl+左键点进去PopupWindow()看一下构造方法
发现构造方法已经给我们提供了一些简便的方法
所以一般直接用三参或者四参的就行了
注:我们发现有一个参数View contentView,这个contentView其实就是我们PopupWindow这个弹窗显示的布局
所以我们需要先准备一个popup_view
加点东西进去
再回到java中
run一下
注:这里的show不太一样,详见上面的ppt里
showAsDropDown():有一个一参的,有一个三参的,参数里面的view就是要我们的弹窗显示在哪个控件的附近,其他两个参数就是向x或y方向偏移,我们可以直接用数字,但是因为我们是相对这个view进行显示的,其实还能根据实际情况算出理想的偏移,比如:
run一下
y轴方向改成负的试试
我们还是把它弄回去,就显示在正下方就可
然后我们发现,点击这俩按钮,我们的PopupWindow退不出去,或者点击空白处也退不出去
要想点击空白处退出PopupWindow,可以下面这样
通过setFocusable()获取焦点
方法一:可以通过popupWindow去set
方法二:其实PopupWindow()中的四参构造方法中已经有了
所以
完成点空白处退出PopupWindow
继续
setBackgroundDrawable():设置背景,参数为drawable,老样子我们先导进去个图片
注:要在showAsDropDown(view)显示之前
run一下
还有popupView里面的俩个按钮
老样子,设置俩个监听
注:这俩按钮是在popupView里面的,所以要放在popupView的后面
注:注意不是直接findViewById,而是popupView.findViewById,否则会报空指针异常
run一下
犯错点:
直接findViewById,没有popupView.findViewById
然后闪退
打开日志发现
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
涨点记性!
继续
一般点击这俩按钮后,就会自动退出PopupWindow弹窗
通过dismiss()进行设置
dismiss:关闭弹窗
在按钮的点击监听里面设置
再看其他的
setAnimationStyle(int animationStyle):设置加载动画
这个我们目前还没学会动画,先不处理
其实只要我们先做好一个动画的xml,再把这个xml放进去就行了
setTouchable:设置触摸使能(点击PopupWindow里面的时候的使能)
setOutsideTouchable:设置PopupWindow外面的触摸使能
主要也是影响点击事件,目前不做过多解释