PopupWindow学习大全




一、AlertDialog与PopupWindow的区别

             本质区别为:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞

二、创建PopupWindow的核心代码:

  1. <font size="2"> // 加载PopupWindow的布局文件
  2.   View contentView = LayoutInflater.from(getApplicationContext())
  3.                                .inflate(R.layout.popup, null);
  4.   // 设置PopupWindow的背景颜色
  5.   contentView.setBackgroundColor(Color.RED);
  6.   // 声明一个对话框
  7.   final PopupWindow popupWindow = new PopupWindow(null, 200, 300);
  8.   // 为自定义的对话框设置自定义布局
  9.   popupWindow.setContentView(contentView);

  10.   // 这个popupWindow.setFocusable(true);非常重要,如果不在弹出之前加上这条语句,你会很悲剧的发现,你是无法在
  11.   // editText中输入任何东西的。该方法可以设定popupWindow获取焦点的能力。当设置为true时,系统会捕获到焦点给popupWindow
  12.   // 上的组件。默认为false哦.该方法一定要在弹出对话框之前进行调用。
  13.   popupWindow.setFocusable(false);

  14.   //设置PopupWindow弹出的位置。
  15.   // popupWindow.showAsDropDown(View view)弹出对话框,位置在紧挨着view组件
  16.   // showAsDropDown(View anchor, int xoff, int yoff)弹出对话框,位置在紧挨着view组件,x y代表着偏移量
  17.   // showAtLocation(View parent, int gravity, int x, int y)弹出对话框, parent 父布局 gravity 依靠父布局的位置如Gravity.CENTER x y 坐标值
  18.    popupWindow.showAsDropDown(button);</font>
复制代码

三、PopupWindow在点击外部区域的时候消失
我用的是Android4.0的系统:  

  1. <font style="font-size: 18px" size="2">PopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));
  2. PopupWindow.setFocusable(true);</font>
复制代码
说明:这两个之间是没有顺序的,且setFocusable这个方法必须设置为true。
这样设置以后,当点击PopupWindow外部时,PopupWindow就会消失。



四、效果是PopupWindow弹出的位置在整个Activity的中央位置
    1. // 创建界面,显示数据  
    2. View view = View.inflate(context, R.layout.fileinfo, null);  
    3. // 2.1给view添加监听器  
    4. initPopupWindowView(view, position);  
    5. // 3、  
    6. popup = new PopupWindow(view, 400, LayoutParams.WRAP_CONTENT,  
    7.             true);  
    8. popup.setBackgroundDrawable(getResources().getDrawable(  
    9.             R.drawable.popup_rectangle));  
    10. View decorView = BooksAndTableAvtivity.this.getWindow()  
    11.             .getDecorView();  
    12. popup.showAtLocation(decorView, Gravity.CENTER, 0, 0);
    复制代码

  • 这里面需要注意的是:
  • 1、LayoutParams是WindowManager中的内部类,
    2、decorView是Activity中Window中的view tree的根节点


五、设置动画
一、怎么设置动画
1、在value文件夹下的styles中设置上style

    1. <resources>
    2.     <style name="PopupAnimation1111111111111">
    3.         <item name="android:windowEnterAnimation">@anim/scale_anim</item>
    4.         <item name="android:windowExitAnimation">@anim/rotate_anim</item>
    5.     </style>

    6. </resources>
    复制代码

2、在调用PopupWindow的setAnimationStyle(R.style.XXX);
二、对PopupWindow的update方法的理解

     当在PopupWindow显示过程(调用了showAsDropDown中改变了PopupWindow的设置,如果没有调用update     方法,那么这个设置只能在下次显示的时候才会有效果


转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=148813

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值