我們Android平台是一個又一個的Activity組成的,每一個Activity有一個或多個View構成。
所以說,當我們想要顯示一個介面的時候,我們首先想到的是建立一個Activity,然後所有的操作在Activity裡面實現,或是一個Dialog或Toast。這種方式固然簡單,但是在有些情況下,我們要求的只是簡單的顯示,用Activity顯然是多餘,這個時候,我們要如何處理呢?
Android的一個應用在底層也是linux的一個進程,但在上層弱化了進程的概念,抽像出了Activity這樣一種互動。程式碼直接控制的是Activity,使用者的互動也是Activity。
Activity是從使用者互動的角度抽象化出來的對象,在概念和使用上和進程相隔離。進程類似一個收養的功能,一個進程可以有多個Activity,不僅可以收養自己目前應用的Activity,
也可以收養其他安裝包指定給該進程的Activity,Activity銷毀了,進程並不銷毀(除非系統需要或程式碼強制殺死進程)。
原來,整個Android的視窗機制是基於一個叫做 WindowManager,這個介面可以加入view到螢幕,
也可以從螢幕刪除view。它面對的物件一端是螢幕,另一端就是View,直接忽略我們以前的Activity
或Dialog之類的東東。其實我們的Activity或Diolog底層的實作也是透過WindowManager,這個
WindowManager是全域的,整個系統就是這個唯一的東東。它是顯示View的最底層了。
寫一個簡單的程式碼:
Java程式碼
WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); Button view = new Button(this); view.setText("window manager test!"); WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); mWm.addView(view, mParams);
一般在剛開始開發android時,會犯一個錯誤,即在View的構造函數中獲取getWidth()和getHeight(),
當一個view對象創建時,android不知道其大小,所以getWidth()和getHeight()返回的結果是0,
真正大小是在計算佈局時才會計算,所以會發現一個有趣的事,即在onDraw( ) 卻能取得長寬的原因。
使用WindowManager實現懸浮視窗
WindowManager.LayoutParams params; params = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE,//TYPE_APPLICATION, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP; manager.addView(tmpView, params);
就可以將需要加到懸浮視窗中的View加入到視窗中了:
if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中 wManager.addView(view,wmParams);
其中,view為需要放到懸浮視窗中的視圖元件。
如果要將其從WindowManager中移除,則可以執行以下語句:
if(view.getParent()!=null) wManager.removeView(view);
android中可按上面的方法增加多個窗口,多個窗口產生的問題:
2. 應用生命週期的問題
當其他應用程式出現在瀏覽器主Activity之前時,不論前面彈出了多少個瀏覽器的子窗口,瀏覽器的生命週期都進入onPause狀態。
更多android瀏覽器之多視窗方案詳解相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。