Android之全局對話框

  • 項目中為了實現(xiàn)賬號多設(shè)備登錄的監(jiān)聽 一個賬號在別的設(shè)備登錄時在該設(shè)備上需要彈出對話框提示 故而用到全局對話框

實現(xiàn)方式

  • [ 1 ]. 添加權(quán)限
 <!--全局彈窗的權(quán)限-->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  • [ 2 ]. 設(shè)置dialog類型

一定要在show之前設(shè)置
如果類型為TYPE_SYSTEM_ALERT需要開啟懸浮窗權(quán)限 使用相當(dāng)不方便
因此使用TYPE_TOAST 一般設(shè)備不需要特意去開啟權(quán)限即可使用

//設(shè)置彈出全局對話框
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
//dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();
  • [ 3 ]. 完整代碼
public static void showDialog(final Context context, final String title, final Boolean isCancelable, final String ok, final String close, final DialogCallback callback) {

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        /*true 代表點擊空白可消失   false代表點擊空白哦不可消失 */
        builder.setCancelable(isCancelable);
        View view = View.inflate(context, R.layout.item_dialog_exit, null);
        TextView tv_itemdialog_title = (TextView) view.findViewById(R.id.tv_itemdialog_title);
        TextView tv_itemdialog_ok = (TextView) view.findViewById(R.id.tv_itemdialog_ok);
        TextView tv_itemdialog_close = (TextView) view.findViewById(R.id.tv_itemdialog_close);

        tv_itemdialog_ok.setText(ok);
        tv_itemdialog_close.setText(close);

        builder.setView(view);
        final AlertDialog dialog = builder.create();
        //設(shè)置彈出全局對話框
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
        dialog.show();

        tv_itemdialog_title.setText(title);
        tv_itemdialog_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callback.onPositive(dialog);
            }
        });

        tv_itemdialog_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callback.onNegative(dialog);
            }
        });

使用WindowManager實現(xiàn)全局對話框


/**
     * 顯示彈出框
     *
     * @param context
     */
    public static void showPopupWindow(final Context context, final DialogCallback callback) {
        // 獲取WindowManager
        final WindowManager mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);


        final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        // 類型
        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        // 設(shè)置flag
        params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        // 如果設(shè)置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE在抛,彈出的View收不到Back鍵的事件
        // 不設(shè)置這個彈出框的透明遮罩顯示為黑色
        params.format = PixelFormat.TRANSLUCENT;
        // FLAG_NOT_TOUCH_MODAL不阻塞事件傳遞到后面的窗口
        // 設(shè)置 FLAG_NOT_FOCUSABLE 懸浮窗口較小時进栽,后面的應(yīng)用圖標(biāo)由不可長按變?yōu)榭砷L按
        // 不設(shè)置這個flag的話义桂,home頁的劃屏?xí)袉栴}
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = Gravity.CENTER;
        TextView textView = new TextView(context);
        textView.setText("sfgsfdsfbsadfbasdfg");
        textView.setTextSize(100);

        final View mView = LayoutInflater.from(context).inflate(R.layout.item_dialog_exit, null);
        TextView tv_itemdialog_title = (TextView) mView.findViewById(R.id.tv_itemdialog_title);
        TextView tv_itemdialog_ok = (TextView) mView.findViewById(R.id.tv_itemdialog_ok);
        TextView tv_itemdialog_close = (TextView) mView.findViewById(R.id.tv_itemdialog_close);

        tv_itemdialog_ok.setText("重新登錄");
        tv_itemdialog_close.setText("退出登錄");
        tv_itemdialog_title.setText("該賬戶在其他設(shè)備登錄,若不是您在操作,請及時修改密碼以防泄露信息");
        tv_itemdialog_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 隱藏彈窗
                mWindowManager.removeView(mView);
                callback.onPositive();
            }
        });

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

        mWindowManager.addView(textView, params);
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丽惭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馆揉,更是在濱河造成了極大的恐慌格带,老刑警劉巖准脂,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邪媳,死亡現(xiàn)場離奇詭異捐顷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)悲酷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門套菜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人设易,你說我怎么就攤上這事∮纪罚” “怎么了顿肺?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵戏溺,是天一觀的道長。 經(jīng)常有香客問我屠尊,道長旷祸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任讼昆,我火速辦了婚禮托享,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浸赫。我一直安慰自己闰围,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布既峡。 她就那樣靜靜地躺著羡榴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪运敢。 梳的紋絲不亂的頭發(fā)上校仑,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音传惠,去河邊找鬼迄沫。 笑死,一個胖子當(dāng)著我的面吹牛卦方,可吹牛的內(nèi)容都是我干的羊瘩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼愿汰,長吁一口氣:“原來是場噩夢啊……” “哼困后!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衬廷,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤摇予,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吗跋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侧戴,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年跌宛,在試婚紗的時候發(fā)現(xiàn)自己被綠了酗宋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡疆拘,死狀恐怖蜕猫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哎迄,我是刑警寧澤回右,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布隆圆,位于F島的核電站,受9級特大地震影響翔烁,放射性物質(zhì)發(fā)生泄漏渺氧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一蹬屹、第九天 我趴在偏房一處隱蔽的房頂上張望侣背。 院中可真熱鬧,春花似錦慨默、人聲如沸贩耐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憔杨。三九已至,卻和暖如春蒜胖,著一層夾襖步出監(jiān)牢的瞬間消别,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工台谢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留寻狂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓朋沮,卻偏偏與公主長得像蛇券,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子樊拓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容