Android PopupWindow介绍及实现菜单效果
本文主要介绍PopupWindow的基本知识、利用PopupWindow实现类似网页上或者windows开始按钮的菜单效果以及如何解决PopupWindow和listView或GridView同时使用时焦点及页面响应问题
?
因为PopupWindow能实现非模态对话框效果,所以建议大家使用,而不是用AlertDialog等模态对话框阻止用户的操作.
?
1、PopupWindow介绍
PopupWindow可以用来装载一些信息或是View,它可以悬浮在当前活动窗口上,并且不干扰用户对背后窗口的操作。
1.1 PopupWindow创建方式,主要为
a.?显示contentView?
PopupWindow(View contentView)
?
b.?显示contentView,固定的高度和宽度
PopupWindow(View contentView, int width, int height)
更多见PopupWindow
?
1.2 PopupWindow显示方式,三种分别为
a.?在anchor的左下角显示PopupWindow,偏移位置为xoff和yoff,即相当于以anchor的左下角定点为二维坐标系的原点,向右为正x,向下为正y
void showAsDropDown(View anchor, int xoff, int yoff)
?
b.?在anchor的左下角显示PopupWindow,偏移位置为0
void showAsDropDown(View anchor)
?
c.?在固定位置显示,parent为父view,gravity为显示的格式(如剧中),x和y为坐标点
void showAtLocation(View parent, int gravity, int x, int y)
?
1.3 其他可能用到的
焦点,设置PopupWindow是否可以获得焦点。
输入法模式setInputMethodMode。有三种为允许输入法、不允许输入法、根据是否可以有焦点决定。
?
2、利用PopupWindow实现菜单效果
2.1 利用listView显示
其中R.layout.account_manage_long_click_row文件为
注意必须设置PopupWindow的setFocusable(true),否则listView无法响应,
同时需要设置setBackgroundDrawable(new BitmapDrawable());否则setFocusable(true)后,点击页面其他地方便无法响应。
?
除了setBackgroundDrawable(new BitmapDrawable());还可以使用下面两种解决页面无法响应问题
a、处理响应有点麻烦,有兴趣可以自己看看http://zhoudan241.iteye.com/blog/1147730b、最笨的方法将listView中元素拿出来放到LinearLayout中,对于非listView都无需设置setFocusable(true),从而解决问题,具体可以见http://blog.csdn.net/ihrthk/article/details/7338791
但这种方法对于动态变化的菜单需要配置多份layout文件
?
2.2 利用GridView实现方格菜单
对于很多应用像uc浏览器的菜单都有更多的选项和分级,实现道理同上面的listView,可以参考http://blog.csdn.net/kkfdsa132/article/details/6403404
同样可能碰到上面的响应问题
?
参考:
http://developer.android.com/reference/android/widget/PopupWindow.html
?
关于PopupWindow菜单更炫的效果可参考
http://blog.csdn.net/wanli_smile/article/details/6907433
?
更多对话框使用可参考
http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html