標籤:
最近發現,如果我在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