欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于仿ios底部向上弹出dialog的最简单方法

程序员文章站 2022-05-31 15:58:07
...

发现网上的很多方法都代码量比较大,而且很多功能都是我不需要的。那么这个时候,我就是想要一个最纯碎的弹出dialog,从底部往上弹,于是就有了我这个精简版
首先我们看下界面,非常简单(忽视我下面的Tab):
关于仿ios底部向上弹出dialog的最简单方法
然后是dialog的布局
关于仿ios底部向上弹出dialog的最简单方法
好,那么我们现在开始代码
首先我们把按钮实例化一下:

 private void initView() {
        btnShow = (Button) mView.findViewById(R.id.btn_show);
        btnShow.setOnClickListener(this);
    }

然后开始写PopupWindow

 private void openPopupWindow(View v) {
        if (popupWindow != null && popupWindow.isShowing()) {
            return;
        }
        //设置PopupWindow的View
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.item_pp_bottom, null);
        TextView tvCancel = (TextView) view.findViewById(R.id.tv_cancel);
        TextView tvBottom1 = (TextView) view.findViewById(R.id.tv_bottom1);
        TextView tvBottom2 = (TextView) view.findViewById(R.id.tv_bottom2);
        TextView tvBottom3 = (TextView) view.findViewById(R.id.tv_bottom3);
        tvCancel.setOnClickListener(this);
        tvBottom1.setOnClickListener(this);
        tvBottom2.setOnClickListener(this);
        tvBottom3.setOnClickListener(this);
        popupWindow = new PopupWindow(view, RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        //设置背景,不设置背景的话,点击弹窗外部不能隐藏自己
        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        popupWindow.setFocusable(false);//设置取消焦点
        popupWindow.setOutsideTouchable(true);//设置点击弹窗外部区域隐藏自己
        popupWindow.setAnimationStyle(R.style.popstyle);//设置动画
        popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);//设置位置
    }

再加上点击事件:

 @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_show:
                openPopupWindow(v);
                break;
            case R.id.tv_bottom1:
                Toast.makeText(getActivity(), "我是选择1", Toast.LENGTH_SHORT).show();
                break;
            case R.id.tv_bottom2:
                Toast.makeText(getActivity(), "我是选择2", Toast.LENGTH_SHORT).show();
                break;
            case R.id.tv_bottom3:
                Toast.makeText(getActivity(), "我是选择3", Toast.LENGTH_SHORT).show();
                break;
            case R.id.tv_cancel:
                popupWindow.dismiss();
                break;
        }
    }

这样就完成了,当然了,有时候当弹出dialog的时候,整个页面需要有一个明显的区别的话,可以加上:

 popupWindow.setOnDismissListener(this);//设置消失监听
        setBackgroundAlpha(0.8f);//设置背景色
//设置屏幕背景透明效果
    public void setBackgroundAlpha(float alpha) {
        WindowManager.LayoutParams wmlp = getActivity().getWindow().getAttributes();
        wmlp.alpha = alpha;
        getActivity().getWindow().setAttributes(wmlp);
    }

然后加上监听事件:

 @Override
    public void onDismiss() {
        setBackgroundAlpha(1);
    }

这样一个纯碎的底部弹出dialog就出来了。
最后不要忘了style:

popstyle

<resources>
   <style name="popstyle" parent="android:Animation">
        <item name="@android:windowEnterAnimation">@anim/pop_init</item>
        <item name="@android:windowExitAnimation">@anim/pop_out</item>
    </style>
</resources>

pop_init

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

pop_out

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

OK.基本就是这样了,纯碎底部弹出无任何添加剂