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形式  這樣也可以在任何地方彈出對話框了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章