安卓 PopupWindow 的 2 个坑

Posted 陈蒙_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓 PopupWindow 的 2 个坑相关的知识,希望对你有一定的参考价值。

文章目录

手势不透传

在 PopupWindow 展示的情况下,必须要先将其关闭才能继续后续动作,比如滑动列表等。
而我们期待的效果是关闭 PopupWindow 的同时可以滑动列表,就像微信朋友圈那样:

遮盖导航栏

对于带有虚拟导航栏的手机,PopupWindow 的入场动画会遮盖虚拟导航栏。
入场动画实现方式:

PopupWindow.setAnimationStyle(R.style.DragDelWindowAnim);

style.xml:

    <style name="DragDelWindowAnim">
        <item name="android:windowEnterAnimation">
            @anim/drag_del_pic_win_anim_in
        </item>
        <item name="android:windowExitAnimation">
            @anim/drag_del_pic_win_anim_out
        </item>
    </style>

drag_del_pic_win_anim_in.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromYDelta="100%p"
    android:startOffset="0"
    android:toYDelta="0" />

drag_del_pic_win_anim_out.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromYDelta="0"
    android:startOffset="0"
    android:toYDelta="100%p" />

而我们期待的效果是从虚拟导航栏底部出现,就像微信朋友圈发状态那样:

上述两个坑,目前最好的解决方案是放弃 PopupWindow,转而使用 View。
但是 View 的缺陷也很明显,即展示位置的局限性。
如果有大神知道如何使用 PopupWindow 本身又能解决上述问题,请不吝指教。

以上是关于安卓 PopupWindow 的 2 个坑的主要内容,如果未能解决你的问题,请参考以下文章

PopupWindow在安卓7.0及7.1系统上位置显示异常

PopupWindow在安卓7.0及7.1系统上位置显示异常

从源码剖析PopupWindow 兼容Android 6.0以上版本点击外部不消失

Android弹窗探究之PopupWindow的使用

请教popupwindow点击外部关闭问题

Android中实现popupwindow(全屏+阴影+动画)