PopupWindow全解析

本文详细介绍了Android中的PopupWindow,包括其定义、与Dialog的区别、创建方法、展示方式及动画设置。通过示例代码展示了如何使用PopupWindow,并强调了在不同设备上的兼容性问题,特别是showAsDropDown()方法在三星设备上的问题。此外,还提到了通过getLocationInWindow()获取控件位置以实现精确显示PopupWindow的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是popupWindow?

popupWindow是一个悬浮在当前activity的一个窗口,可以用于展示各种View.利用popupWindow我们可以去实现类似menu,spinner,dialog的效果.(需要注意的是:当我们在一个popupWindow上试图再弹出一个popupWindow时会报一个父控件没有找到的错误)

2.popupWindow和dialog有很多相似之处,他们具体的区别又是什么呢?

popupWindow和dialog最大的区别就是dialog是非阻塞的,popupWindow是阻塞的.

3.如何创建一个popupWindow呢?

我们可以通过popupWindow的构造方法PopupWindow(View contentView, int width, int height, boolean focusable)来创建一个popupWindow的实例,contentView是popupWindow要显示的view,width是popupWindow的宽度,height是popupWindow的高度,focusable是popupWindow能否获得焦点.参考代码如下:

		final PopupWindow popupWindow = new PopupWindow(contentView,width, height, true);
		//设置popupWindow可点击
		popupWindow.setTouchable(true);
		// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
		popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
4.如何将创建的popupWindow展示出来呢?

系统为我们提供了两个方法让我们展示popupWindow,分别是showAsDropDown()和showAtLocation()这两个方法,下面我们分别看一下这两个方法:

showAsDropDown(View anchor, int xoff, int yoff, int gravity)这个方法是我们指定一个anchorView作为锚点,然后设置popupWindow相对于锚点的x和y的缩进值,gravity是指popupWindow的显示方式是居中或者其他.(在三星的设备中这个方法可能会出现错误,影响程序运行)

showAtLocation(View parent, int gravity, int x, int y)这个方法是我们传入popupWindow的父窗口,gravity是指popupWindow的显示方式是居中或者其他,然后设置popupWindow在父窗口中的x值和y值.

介绍完了两个展示popupWindow的方法,因为第一个方法不能兼容全部设备,所以我们倾向于使用第二个方法,但是使用第二个方法我们会遇到一个问题,假如我们想实现一个这样的功能,点击一个按钮然后在这个按钮的下方显示我们的popupWindow,我们如何确定popupWindow在当前窗口的绝对位置呢?这时我们需要一个getLocationInWindow()的方法来获取我们按钮在当前窗口的绝对位置.getLocationInWindow有一个十分相似的方法叫getLocationInScreen,顾名思义,一个是获取相对于当前窗口的绝对位置,一个是获取相对于屏幕的绝对位置.getLocationInWindow()会将得到的值赋给一个长度为2的数组,第一个位置代表x值,第二个位置代表y值.

5.如何设置popupWindow进入和退出的动画呢?

 我们可以使用popupWindow的setAnimationStyle(int animationStyle)方法来为popupWindow来设置相应的进入和退出动画.首先我们要创建两个动画文件加入这两个文件分别是@anim/popuwinoew_alpha_alpha和@anim/exit_popuwinoew_alpha_alpha,接下来我们在Style文件中声明

<style name="popwin_anim_style">
        <item name="android:windowEnterAnimation">@anim/popuwinoew_alpha_alpha</item>
        <item name="android:windowExitAnimation">@anim/exit_popuwinoew_alpha_alpha</item>  
    </style>
之后我们就可以调用popupWindow.setAnimationStyle(R.style.popwin_anim_style)来为popupWindow设置动画效果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值