android Window dialog样式

有的时候我们需要在任何一个界面都可以弹出一个对话框 比如activity service reciver等 这种情况下我们有两种方式

一种是利用windowmanager弹出一个系统对话框

   // 获取WindowManager
        final WindowManager mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);


        final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        // 类型
        params.type = WindowManager.LayoutParams.TYPE_TOAST;
        // 设置flag
        params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        // 如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,弹出的View收不到Back键的事件
        // 不设置这个弹出框的透明遮罩显示为黑色
        params.format = PixelFormat.TRANSLUCENT;
        // FLAG_NOT_TOUCH_MODAL不阻塞事件传递到后面的窗口
        // 设置 FLAG_NOT_FOCUSABLE 悬浮窗口较小时,后面的应用图标由不可长按变为可长按
        // 不设置这个flag的话,home页的划屏会有问题
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = Gravity.CENTER;

        final View mView = LayoutInflater.from(context).inflate(R.layout.layout_main_view, null);
//        mWindowManager.removeView(mView);
        Button ensure_btn = (Button) mView.findViewById(R.id.ensure_btn);
        Button cancle_btn = (Button) mView.findViewById(R.id.cancle_btn);
        TextView textView = (TextView) mView.findViewById(R.id.title_tv);

        ensure_btn.setText("確定");
        cancle_btn.setText("取消");
        textView.setText(message);
        ensure_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 隐藏弹窗
                mWindowManager.removeView(mView);
                callback.onPosition();
            }
        });

        cancle_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mWindowManager.removeView(mView);
                callback.onNegative();
            }
        });
        mWindowManager.addView(mView, params);

一种是把activity当做是dialog形式  这样也可以在任何地方弹出对话框了

猜你喜欢

转载自blog.csdn.net/xuyao625010693/article/details/80926281