android的系统弹出控件很多,Toast,OptionsMenu,Dialog,PopupWindow等。一大堆的弹出控件,文档又没有明确说出各控件应用于哪些场景,使得实际开发中很多鸡肋,有时候自己花很多力气去尝试做一个弹出控件,结果才发现用错了api接口。
最近在做一个项目,要求用户在title栏中点击button弹出检索框进行搜索。在网上找了很多,最开始想的是用AlertDialog,我要做的效果是弹出框宽度为全屏:match_parent,高度为自适应:wrap_content,底层为背景半透明。但是在学习过的源码中从来没有见到过占满全屏的Dialog弹框,所以想着用PopupWindow来做。
1)AlertDialog是非阻塞线程的,Popupwindow是阻塞线程的。
2)Dialog没法设置宽为整个屏幕宽,总有点边界。Popupwindow可以。
1、Dialog及设置Dialog的动画
设置Dialog的位置和大小与加载的布局文件无关。需自己设置dialog参数。
1)设置Dialog位置:
2)去标题:
4)设置动画
window_out.xml:
第三步:将动画用于dialog中
最近在做一个项目,要求用户在title栏中点击button弹出检索框进行搜索。在网上找了很多,最开始想的是用AlertDialog,我要做的效果是弹出框宽度为全屏:match_parent,高度为自适应:wrap_content,底层为背景半透明。但是在学习过的源码中从来没有见到过占满全屏的Dialog弹框,所以想着用PopupWindow来做。
以下根据网上查阅的资料,整理了Dialog和PopupWindow的一些区别,涉及到弹框场景时,以作参考。
AlertDialog和Popupwindow的区别:1)AlertDialog是非阻塞线程的,Popupwindow是阻塞线程的。
2)Dialog没法设置宽为整个屏幕宽,总有点边界。Popupwindow可以。
1、Dialog及设置Dialog的动画
设置Dialog的位置和大小与加载的布局文件无关。需自己设置dialog参数。
1)设置Dialog位置:
设置位置时必须先指定Dialog的gravity属性,否则指定大小无用。
2)去标题:
3)设置Dialog的宽和高
4)设置动画
设置Dialog的动画只能通过设置xml的形式,然后设置在style中,最后在代码中设置。
2)贴代码
第一步:写动画xml
window_in.xml:
window_out.xml:
第二步:动画配置到style中
第三步:将动画用于dialog中
2、Popupwindow
1)设置显示位置特别方便:
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移。
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移。
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移。
注意一定要设置backgroundDrawable
有种说法是pw.setFocusable(false);,则不点击区域以外不会消失。经测试,此种说法不对。
3)完整用法贴代码:
-
顶
- 1
-
踩