天天看點

Android中懸浮視窗的實作原理和示例代碼

用了我一個周末的時間,個中憤懑就不說了,就這個問題,我翻遍全球網絡沒有一篇像樣的資料,現在将實作原理簡單叙述如下:

調用windowmanager,并設定windowmanager.layoutparams的相關屬性,通過windowmanager的addview方法建立view,這樣産生出來的view根據windowmanager.layoutparams屬性不同,效果也就不同了。比如建立系統頂級視窗,實作懸浮視窗效果!

windowmanager的方法很簡單,基本用到的就三個addview,removeview,updateviewlayout。

而windowmanager.layoutparams的屬性就多了,非常豐富,具體請檢視sdk文檔。這裡給出android中的windowmanager.java源碼,可以具體看一下。

下面是簡單示例代碼:

别忘了在androidmanifest.xml中添權重限:

ps:這裡舉例說明一下type的值的意思:

這個first_system_window的值就是2000。2003和2002的差別就在于2003類型的view比2002類型的還要top,能顯示在系統下拉狀态欄之上!

————————————————————————————-

已經給出可自由移動懸浮視窗的demo,參加這裡。

繼續閱讀