Android弹窗探究之PopupWindow的使用

相对于AlertDialog的使用,PopupWindow的使用也比较简单,这里主要介绍的是PopupWindow的基础使用包括在使用过程中的一些注意事项,做个笔记。

效果展示:

在这里插入图片描述

PopupWindow的基础方法

创建popupWindow实例
popupView = LayoutInflater.from(this).inflate(R.layout.popupwindow_view, null)
popupWindow = PopupWindow()
设置展示的视图
// 设置PopupWindow装载的视图
// 也可以在创建popupWindow的时候直接设置进去
popupWindow?.contentView = popupView
设置宽度和高度
// 设置PopupWindow的宽高
// 1》自定义View的时候,最外层的布局设置的宽高无效
// 2》在外面必须手动设置宽度和高度,并且以外面设置的宽高为主
popupWindow?.width = ViewGroup.LayoutParams.WRAP_CONTENT
popupWindow?.height = ViewGroup.LayoutParams.WRAP_CONTENT
设置外部区域可以点击取消popupWindow
// 设置外部区域可以点击取消popupWindow
popupWindow?.isOutsideTouchable = true
设置背景
// 设置PopupWindow的背景
// popupWindow?.setBackgroundDrawable(resources.getDrawable(R.mipmap.ic_launcher))
设置popupWindow是否可以聚焦
// 设置PopupWindow可以聚焦
// 如果不设置,在PopupWindow弹出的时候,点击返回键将直接退出Activity
// 设置之后,在PopupWindow弹出的时候,点击返回键不会直接退出Activity而是关闭当前弹出的PopupWindow
popupWindow?.isFocusable = true
设置弹窗弹出的动画高度
// 设置弹窗弹出的动画高度
popupWindow?.elevation = 100f
设置popupWindow是否可以触摸
// 设置PopupWindow可以触摸
popupWindow?.isTouchable = true
设置触摸监听
// 设置触摸监听
popupWindow?.setTouchInterceptor {
    _, _ ->
    Toast.makeText(this,"触发事件",Toast.LENGTH_SHORT).show()
    false
}
设置取消事件监听
// 设置PopupWindow监听取消事件
popupWindow?.setOnDismissListener {
   
    Toast.makeText(this,"PopupWindow被关闭",Toast.LENGTH_SHORT).show()
}

PopupWindow的展示

方式一:

// 方法一:showAsDropDown(View anchor)
//        showAsDropDown(View anchor, int xoff, int yoff)
//        showAsDropDown(View anchor, int xoff, int yoff, int gravity)
//        anchor代表的是目标View,即参考的View
//        xoff,yoff     目标View的坐标偏移量
//        int gravity   目标View的位置,默认为Gravity.TOP | Gravity.START,即以左上角为起始位置
popupWindow?.showAsDropDown(view,0,0, Gravity.BOTTOM)

方式二:

// 方法二:showAtLocation(View parent, int gravity, int x, int y)
//        View parent代表的是要能获取到window唯一标示的(也就是只要能获取到window 标示,view是什么控件都可以)
//        int gravity代表的是位置,即屏幕的上下左右,注意系统默认都是在屏幕中间
//         int x, int y偏移量
popupWindow?.showAtLocation(view, Gravity.TOP, 0, 0)

当然,在实际的开发过程中我们并不能仅仅满足于如何简单使用,更多的时候我们需要去考虑兼容性与扩展性的问题,所以,在这里,我对PopupWindow做了一个简单的封装,如下所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值