android 彈出一個在案頭上出現的window

來源:互聯網
上載者:User

標籤:

最近發現,如果我在Activity A的Handler裡面寫了訊息處理事件,然後從Activity A跳轉到介面B之後,A的handler還在繼續處理訊息,我的項目中,使用者進入到房間介面了,開始接收訊息,然後他也可以跳轉到設定介面去進行一些房間設定,假如這個時候使用者被強制T出去了,不管他在哪個介面,都需要彈出對話方塊顯示使用者被踢出,之前用的普通的Dialog,然後只有房間介面顯示出來的時候才會看到被踢出去的對話方塊,在設定介面看不到這個,然後被測試提bug了。。。一直知道用window可以做,可是試了之後發現主要問題在於,一個是響應window的View上面的button點擊事件,一個是響應系統的back回退事件,這兩個要麼一個都不響應,要麼只能響應一種,在網上找了很久也沒找到好的方法。。最後只能加了一個布爾變數來使back按鍵可以響應。

    private WindowManager mWindowManager = null;    private boolean isShow;    private View view;                public void showMsgWindow(String tipMessage, Context context) {        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        WindowManager.LayoutParams params = createParams();        view = View.inflate(context, R.layout.window, null);        TextView message = (TextView) view.findViewById(R.id.window_message);        Button cancel = (Button) view.findViewById(R.id.window_cancel);        Button ok = (Button) view.findViewById(R.id.window_ok);        message.setText(tipMessage);        cancel.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                removeWindowManager();            }        });        ok.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                removeWindowManager();            }        });        mWindowManager.addView(view, params);        isShow = true;    }    public void removeWindowManager() {        mWindowManager.removeView(view);        isShow = false;    }    public WindowManager.LayoutParams createParams() {        WindowManager.LayoutParams params = new WindowManager.LayoutParams();        // 類型        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;        params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;        params.format = PixelFormat.TRANSLUCENT;        params.width = LayoutParams.MATCH_PARENT;        params.height = LayoutParams.MATCH_PARENT;        params.gravity = Gravity.CENTER;        return params;    } 
  //Activity的方法 @Override public void onBackPressed() { if (isShow) { removeWindowManager(); } else { super.onBackPressed(); } }

比較醜,勉強解決了問題。

android 彈出一個在案頭上出現的window

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.