2015-04-02 63 views
1

我正在使用來電顯示應用程序,我在窗口管理器視圖中顯示撥號/接收號碼的信息。用戶可以手動關閉視圖。一切都很順利,直到我通過呼叫等待服務進行測試。即使在單擊關閉按鈕並顯示錯誤「查看未連接到窗口管理器」之後,呼叫等待視圖仍保留在屏幕上。 我正在做所有這些服務的東西。如何從Android的窗口管理器中刪除多個視圖?

我的問題是,如果有任何方法可以刪除多個意見,只需點擊一下。 或者我可以跟蹤附加到窗口管理器的視圖嗎?

這裏是我的代碼

linearLayout = new LinearLayout(this); 
    linearLayout.addView(textHeaderName); 
    linearLayout.addView(textheader); 
    linearLayout.addView(chatHead); 
    linearLayout.addView(textfooter); 
    linearLayout.setOrientation(LinearLayout.VERTICAL); 

    btnClose.setImageResource(R.drawable.button_close); 
    btnClose.setLeft(0); 
    chatHead.setBackgroundResource(R.drawable.img); 

android.view.WindowManager.LayoutParams layoutparams = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSPARENT); 
    android.view.WindowManager.LayoutParams layoutparams1 = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSPARENT); 
    android.view.WindowManager.LayoutParams layoutparams2 = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSPARENT); 
    final android.view.WindowManager.LayoutParams paramsChatHead = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSPARENT); 
    android.view.WindowManager.LayoutParams layoutparams3 = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSPARENT); 

    new android.widget.LinearLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT); 

    layoutparams.gravity = 53; 
    layoutparams.y = 0; 
    layoutparams1.gravity = 49; 
    layoutparams1.x = 0; 
    layoutparams1.y = 0; 
    layoutparams2.gravity = 49; 
    layoutparams2.x = 0; 
    layoutparams2.y = 25; 
    paramsChatHead.gravity = 49; 
    paramsChatHead.x = 0; 
    paramsChatHead.y = 50; 
    layoutparams3.gravity = 49; 
    layoutparams3.x = 0; 
    layoutparams3.y = imgheight + 50; 

    try 
    { 
     windowManager.addView(linearLayout, layoutparams1); 
     windowManager.addView(btnClose, layoutparams); 

    } catch (Exception e) 
    {} 

關閉事件:

btnClose.setOnClickListener(new android.view.View.OnClickListener() 
    { 
     public void onClick(View view) 
     { 
      try 
      { 
       if (linearLayout != null) 
       { 
        windowManager.removeView(linearLayout); 
       } 
       if (btnClose != null) 
       { 
        windowManager.removeView(btnClose); 
       } 
      } catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     }  
    }); 

請幫

+0

假設會發生什麼,如果沒有'linearLayout'&' btnClose'是'NOT NULL' – R9J 2015-04-02 10:17:21

+0

如果兩者都不爲空,那麼在撥打號碼,姓名和其他信息應顯示的號碼後,它會在屏幕上顯示一個窗口。 – swappy 2015-04-02 10:24:16

回答

0

使用此條件:

if (linearLayout.getWindowToken() != null) { 
            windowManager.removeView(linearLayout); 
           }