关于使用PopupWindow的遇到的一些小问题

记得第一次使用PopupWindow是写一个按钮点击后弹出菜单的小玩意。那时候最纠结的就是PopupWindow显示的位置总是不尽人意。那时候试过这些方法:

// 相对某个控件的位置(正左下方),无偏移量
PopupWindow.showAsDropDown(View anchor) 
// 相对某个控件的位置,有偏移,xoff 为 X 轴的偏移量,yoff 为 Y 轴的偏移量                          
PopupWindow.showAsDropDown(View anchor, int xoff, int yoff)
// 在父容器的什么位置,gravity 为相对位置,如:正中央 Gravity.CENTER、下方 Gravity.BOTTOM、Gravity.RIGHT|Gravity.BOTTOM 右下方等,后面两个参数为 x/y 轴的偏移量。
PopupWindow.showAtLocation(View parent, int gravity, int x, int y)

虽然最后是成功解决了问题。但是感觉有些时候使用起来很麻烦。因为需要通过父容器以及PopupWindow自身的大小来进行计算偏移量。最后的我解决方案是直接将PopupWindow的大小设置为全屏。

Rect outRect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);//获取屏幕的大小
PopupWindow popupWindow = new PopupWindow(view, outRect.width(), outRect.height());//设置PopupWindow的大小为除通知栏之外的全屏幕
popupWindow.showAsDropDown(View.inflate(this, R.layout.activity, null), 0, outRect.top);//设置PopupWindow的显示位置为除通知栏的全屏幕

这时候要注意的是。你设置成全屏大小了。不可能全屏都是你的菜单吧。所以要在空白部分放上一个空的View。还要加上点击事件。直接调用dismiss方法。以达到使PopupWindow关闭的目的。

view.findViewById(R.id.view).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        popupWindow.dismiss();
    }
});

这下就爽了。然后很多时候我也喜欢这么用了。因为我可以很任性的设置PopupWindow所该存在的位置。但是有有问题了。。就是对于类似一个ListView里面的Item点击弹出PopupWindow的。。因为弹出的PopupWindow一样。但是位置不一样。于是。我又老老实实的用回了相对位置的方法。。当然,使用的时候要学会具体情况具体分析昂。


然后是一些关于PopupWindow我遇到的一些小问题的解决方法:

PopupWindow打开和关闭动画:

popupWindow.setAnimationStyle(R.style.AnimationPreview);//设置动画文件

    <style name="AnimationPreview">
        <item name="android:windowEnterAnimation">@anim/show_win_in</item><--打开动画-->
        <item name="android:windowExitAnimation">@anim/show_win_out</item><--<span style="font-family:Arial, Helvetica, sans-serif;">关闭动画--></span>

    </style>

show_win_in和show_win_out里面就是最基本的动画资源文件了。


PopupWindow中ListView点击无响应:

popupWindow.setFocusable(true);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值