PopupWindow的知识小结

本文详细介绍了PopupWindow的使用技巧及注意事项,包括构造函数的选择、焦点设置、尺寸控制及消失机制等。

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

我们在很多时候都需要使用PopupWindow来提示消息,PopupWindow是一种非常常用的控件。在使用中要注意下:

第一,构造PopupWindow的时候,要选择合适的构造函数。不同的函数,得到的PopupWindow不同。例如,在下面的四个构造函数中


第一个构造函数设置了显示的view,但是,它却不可获得焦点并且他的尺寸为0;这就有时候出现一个这样的情况:我的代码完全正确,可PopupWindow却看不见,这里就是应为他的尺寸问题。

第二:焦点问题。PopupWindow弹出前,要设置他为可以获得焦点的。否则就会出现点击popupwindow没有反映。popupWindow.setFocusable(true);

第三:如何让它消失。在创建的时候设置他的背景Drawable。popupWindow.setDrawable(new Drawable());这样在单击其他空白区域的时候这个PopupWindow就会消失。

第四:如何控制破pUpWindow的大小,随便设置一个宽和高?关于这点,起初的时候,我在这里犯了一些错。

在之前的学习中,我直接用LayoutInflater来加载布局文件,来得到要显示的view,在用getMeasuredHeight()和getMeasuredWidth()来得到宽和高。得到的结果却是0.

出现这样的错误是对控件的绘制过程不理解。Android控件的绘制分为三大阶段:measure->layout->draw.只有在measure之后(measure函数会调用onMeasure,得到控件的宽和高)才可以调用上述方法来得到宽和高。以下是测量的方法:

int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 
opView.measure(w, h); 
int height =opView.getMeasuredHeight(); 
int width =opView.getMeasuredWidth();
这样就可以得到宽和高。

还有更简单的方法:

构造的时候的参数

new PopupWindow(opView,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,false);

第二和第三个参数指定宽和高。最后一个指定是否可以获得焦点。

当然,上面的一些细节的设置都要在显示之前。一旦显示之后再来设置这些,就没用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值