android popupWindow 底部弹出与消失

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


// 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);


            }
        });

显示的效果:

android popupWindow 底部弹出与消失_第1张图片

然后是动画的布局代码:



<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>

以及



<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 里面


感觉下面这种方式设置 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的宽高,才能构造出来,麻烦….


参考:

  • Android 动画 - TranslateAnimation位移动画 【里面分析了位移动画的属性值,写的很好】
  • Android从屏幕底部弹出popupWindow 里面设置动画的部分似乎不对,找不到对应的api,其他地方是对的
  • Android PopupWindow使用方法小结

  • 自定义PopupWindow轻松实现从底部弹出

你可能感兴趣的:(实际需求解决方案,android)