1. 程式人生 > >Android懸浮視窗的實現

Android懸浮視窗的實現

最近在做一個流量統計的,有個懸浮窗會像樣點。所以稍微研究了下懸浮視窗的實現:效果圖如下:做了個透明背景。。。

這裡寫圖片描述

  1. 懸浮視窗需要在主介面出現,就算APP被關閉了,因此懸浮視窗應該用一個service來控制;
  2. 既然懸浮視窗高於其他應用顯示在手機上,那控制懸浮視窗的應該是系統類,其中WindowManger為懸浮視窗主要實現類;
    WindowManager:視窗管理器,往視窗上新增和刪除一個控制元件,主要有一下步驟:
    (1)首先獲取WindowManager物件,
WindowManager mWindowManager=
 getApplication().getSystemService
(getApplication().WINDOW_SERVICE);

(2)設定懸浮控制元件的樣式,WindowManager物件,對於控制元件的樣式有專門的類進行封裝:WindowManager.LayoutParams,
重要的屬性和方法:

LayoutParams.x 設定控制元件預設在螢幕的x軸
LayoutParams.y 設定控制元件預設在螢幕的y軸
LayoutParams.gravity 設定控制元件在螢幕的gravity
LayoutParams.format 設定控制元件在螢幕
LayoutParams.width 設定控制元件的寬度
……詳細請參考API文件

如下:

             //獲取param物件
    WindowManager.LayoutParam wmParams=new      WindowManager.LayoutParams();

    //調整懸浮窗顯示的停靠位置為左側置頂
    wmParams.gravity = Gravity.LEFT | Gravity.TOP; 

    // 以螢幕左上角為原點,設定x、y初始值
    wmParams.x = 0;
    wmParams.y = 0;

    //設定懸浮視窗長寬資料  
    wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

3、將自定義的view和上面定義的wmParams樣式新增到視窗中,作為懸浮窗

LayoutInflater inflater = LayoutInflater.from(getApplication());
        //獲取浮動視窗檢視所在佈局
     LinearLayout   mFloatLayout = (LinearLayout) inflater.inflate(R.layout.flow_window, null);

        //新增mFloatLayout
        mWindowManager.addView(mFloatLayout, wmParams);

4、移除該懸浮窗

mWindowManager.removeViewImmediate (View view)
“`

自此,可以輕鬆將一個控制元件懸浮在手機上,該懸浮視窗會高於一切,無論在任何介面它都會出現,無法比較“智慧化”,即只有在手機主介面(一級介面)才顯示,其他時候不顯示,要怎麼做?

思路是:由於我是用懸浮來做手機流量的更新,因此只要更新的時候,我判斷一下現在手機顯示的介面是否為主介面,如果不是,我就隱藏起來,就可以了。