android popupWindow 底部弹出与消失

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DucklikeJAVA/article/details/81841020

最近刚好遇到一个这样的需求,于是就写了这样的代码。


// show popup window
findViewById(R.id.btn_pop_show)
        .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                LogUtils.e("click...");
                // todo: popupWindow
                final LinearLayout va = dpd.getDatePickerLayout();
                PopupWindow window = new PopupWindow(getActivity());
                window.setWidth(FrameLayout.LayoutParams.MATCH_PARENT);
                window.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);
                window.setContentView(va);
                // 设置PopupWindow的背景
                window.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
                // 设置PopupWindow是否能响应外部点击事件
                window.setOutsideTouchable(true);

                // 添加动画
                window.setAnimationStyle(R.style.pop_window_anim_style);
//                        window.showAsDropDown(v);
                // 设置popupWindow的显示位置,此处是在手机屏幕底部且水平居中的位置
                window.showAtLocation(v, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);


            }
        });

显示的效果:

显示效果

然后是动画的布局代码:

<!-- pop_in.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="100%"
        android:toYDelta="0"
        android:duration="800" />
</set>

以及

<!-- pop_out.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="100%"
        android:duration="800" />
</set>

还有 styles.xml 里面

<style name="pop_window_anim_style">
    <item name="android:windowEnterAnimation">@anim/pop_in</item>
    <item name="android:windowExitAnimation">@anim/pop_out</item>
</style>

感觉下面这种方式设置 popupWindow挺好的,特别适合这种需求。:

PopupWindow window = new PopupWindow(getActivity());
                window.setWidth(FrameLayout.LayoutParams.MATCH_PARENT);
                window.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);
                window.setContentView(va);

popupWindow还有通过指定宽高的方式来构造的,感觉不方便。因为要显示的view可能来自布局文件。而布局文件里面一般不会写成xxdp的宽高。这样的话,就需要计算出view的宽高,才能构造出来,麻烦….


参考:

猜你喜欢

转载自blog.csdn.net/DucklikeJAVA/article/details/81841020