WindowManager.LayoutParams的type屬性

這篇文章實(shí)際上是對(duì)官方文檔中WindowManager.LayoutParams的type屬性的翻譯

實(shí)際上我只是生硬的翻譯了一下,并不知道所有類型的真正意義

有幾個(gè)關(guān)于window的基礎(chǔ)知識(shí)需要知道

  • 每個(gè)Window都對(duì)應(yīng)了一個(gè)View和一個(gè)ViewRootImpl
  • View是Window存在的實(shí)體
  • IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  • Window的具體實(shí)現(xiàn)位于WindowManagerService中
  • WindowManager是外界訪問Window的入口
  • WindowManager和WindowManagerService交互是一個(gè)IPC過程
  • Window的添加過程實(shí)際上是一次IPC的調(diào)用(為什么會(huì)有token的原因)
token

IBinder 類型對(duì)象
Identifier for this window. This will usually be filled in for you.

type這個(gè)成員變量表示了window的類型(是個(gè)int值)

通常有3中window類型

  1. Application windows
    取值范圍從FIRST_APPLICATION_WINDOW(Constant Value: 1 (0x00000001))到 LAST_APPLICATION_WINDOW(Constant Value: 99 (0x00000063))
    這種window是普通的頂層window.
    這些種類的window的token必須設(shè)置成Activity的token(如果這個(gè)token是null,那么需要你來提供)

  2. Sub-windows
    取值范圍從FIRST_SUB_WINDOW(Constant Value: 1000 (0x000003e8))到 LAST_SUB_WINDOW(Constant Value: 1999 (0x000007cf))
    這種window一般都和其他頂層window關(guān)聯(lián)在一起,
    這種window的token必須是關(guān)聯(lián)的window的token

3.System windows
取值范圍為從 FIRST_SYSTEM_WINDOW(Constant Value: 2000 (0x000007d0)) 到 LAST_SYSTEM_WINDOW(Constant Value: 2999 (0x00000bb7))
這種window是特殊的window類型,一般是系統(tǒng)用戶特殊目的使用的
這種window不應(yīng)該被普通程序使用,
想要使用他們必須擁有特別的權(quán)限
(也就是說從api23開始不要想通過這種創(chuàng)建這種window的方式構(gòu)造懸浮窗了,系統(tǒng)默認(rèn)就不允許)

type有如下類型

//1111111111111111111111111111111111111111111
TYPE_BASE_APPLICATION
//Constant Value: 1 (0x00000001)
一個(gè)所有程序的基礎(chǔ)window,所有其他程序都顯示在其上面


//22222222222222222222222222222222222222222222
TYPE_APPLICATION
//Constant Value: 2 (0x00000002)
一個(gè)普通的應(yīng)用window,它的token必須是Activity的token,用來表示window的歸屬


//333333333333333333333333333333333333333333333
TYPE_APPLICATION_STARTING      
//Constant Value: 3 (0x00000003)
特殊的程序window,用于在程序啟動(dòng)的時(shí)候顯示,不是給程序使用的
當(dāng)程序可以顯示自己的window之前系統(tǒng)會(huì)使用這個(gè)window來顯示Something


//444444444444444444444444444444444444444444444
TYPE_DRAWN_APPLICATION
//Constant Value: 4 (0x00000004)
一個(gè)TYPE_APPLICATION 的變形,
當(dāng)應(yīng)用顯示之前,用來保證windowmanager會(huì)等待這個(gè)window繪制完畢


//5555555555555555555555555555555555555555555555
TYPE_APPLICATION_PANEL
//Constant Value: 1000 (0x000003e8)
這種window相當(dāng)于一個(gè)至于程序window頂部的panel,顯示在依附的window上面


//6666666666666666666666666666666666666666666666
TYPE_APPLICATION_MEDIA
//Constant Value: 1001 (0x000003e9)
這種window用來顯示media(比如視頻),顯示在依附的window下面


//7777777777777777777777777777777777777777777
TYPE_APPLICATION_SUB_PANEL
//Constant Value: 1002 (0x000003ea)
這是相當(dāng)于一個(gè)子panel,顯示在依附的window上面,并且也顯示在任何其他TYPE_APPLICATION_PANEL類型的window上面


//8888888888888888888888888888888888888888888888
TYPE_APPLICATION_ABOVE_SUB_PANEL
//constant value: 1005
貌似官方網(wǎng)站網(wǎng)站上沒有注解,但我在AS中看到了注釋
顯示在依附的window上面,且顧名思義顯示在所有TYPE_APPLICATION_SUB_PANEL的上面


//999999999999999999999999999999999999999999999999
TYPE_APPLICATION_ATTACHED_DIALOG
//Constant Value: 1003 (0x000003eb)
類似于 TYPE_APPLICATION_PANEL ,不過是作為頂層window,而不是作為一個(gè)子window//應(yīng)該是這個(gè)意思


//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
TYPE_STATUS_BAR
//Constant Value: 2000 (0x000007d0)
這個(gè)window是用來顯示狀態(tài)欄的,只可能有一個(gè)狀態(tài)欄window,它被放置在屏幕的最上方,所有的其他window都在它的下方


//BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
TYPE_SEARCH_BAR
//Constant Value: 2001 (0x000007d1)
searchbar的window,只可能有一個(gè)searchbar的window


//CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
TYPE_PHONE
//Constant Value: 2002 (0x000007d2)
這不是一個(gè)程序的窗口,它用來提供與用戶交互的界面(特別是接電話的界面),這個(gè)window通常會(huì)置于所有程序window之上,但是會(huì)在狀態(tài)欄之下


//DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
TYPE_SYSTEM_ALERT       
//Constant Value: 2003 (0x000007d3)
系統(tǒng)window,比如低電量警告之類的,這個(gè)window通常在所有應(yīng)用window之上


//EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
TYPE_TOAST
//Constant Value: 2005 (0x000007d5)
這個(gè)window用來顯示短暫的通知,比如toast之類的


//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
TYPE_SYSTEM_OVERLAY
//Constant Value: 2006 (0x000007d6)
這個(gè)window會(huì)顯示在所有東西之上,系統(tǒng)用來覆蓋屏幕用的,這個(gè)window最好不要獲取焦點(diǎn),不然會(huì)影響keyguard的正常使用


//sixteen
TYPE_PRIORITY_PHONE
//Constant Value: 2007 (0x000007d7)
高優(yōu)先級(jí)的UI,即使keyguard處于激活狀態(tài)也要顯示它,最好不要獲取焦點(diǎn)


//seventeen
TYPE_STATUS_BAR_PANEL
//Constant Value: 2014 (0x000007de)
狀態(tài)欄的下拉界面 


//eighteen
TYPE_SYSTEM_DIALOG
//Constant Value: 2008 (0x000007d8)
狀態(tài)欄的下拉界面顯示的dialog 


//nineteen
TYPE_KEYGUARD_DIALOG
//Constant Value: 2009 (0x000007d9)
鎖屏界面顯示的對(duì)話框


//twenty
TYPE_SYSTEM_ERROR
//Constant Value: 2010 (0x000007da)
系統(tǒng)內(nèi)部錯(cuò)誤,顯示在所有東西上面



//廿壹,廿壹,廿壹,廿壹,廿壹
TYPE_INPUT_METHOD
//Constant Value: 2011 (0x000007db)
內(nèi)部輸入法window,顯示在普通的UI之上,
當(dāng)這個(gè)window顯示的時(shí)候,為了保證這個(gè)window獲取到焦點(diǎn),Application的window會(huì)被重新測(cè)繪


// 廿貳,廿貳,廿貳,廿貳,廿貳,廿貳,廿貳,廿貳
TYPE_INPUT_METHOD_DIALOG
//Constant Value: 2012 (0x000007dc)
輸入法的對(duì)話框,顯示在輸入法的window之上

總得來說有個(gè)原則,type值越大則顯示的越靠上層,
上面的這些type常量都是系統(tǒng)中各種UI默認(rèn)的使用的值

如果要達(dá)到你想要達(dá)到的效果甚至可以自己設(shè)置想要的int值

比如想要覆蓋在狀態(tài)欄之上,就設(shè)置個(gè)大于2001且小于2999的值就行

有一點(diǎn)要注意,api>=23之后type要是>=2000則需要一些權(quán)限才能使用,至于是什么權(quán)限我查了很多網(wǎng)頁(yè)都沒查出來,恐怕是ROOT權(quán)限吧

而且api>=23之后,要正確設(shè)置token值才能使用,要注意哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容