FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
只要這個window對用戶是可見的,則允許在屏幕開啟的時候鎖定屏幕這個flag可以單獨的使用,也可以配合FLAG_KEEP_SCREEN_ON和(或者) FLAG_SHOW_WHEN_LOCKED使用
FLAG_DIM_BEHIND
所有在這個window之后的會變暗,使用dimAmount屬性來控制變暗的程度(1.0不透明,0.0完全透明)
FLAG_NOT_FOCUSABLE
設(shè)置之后window永遠不會獲取焦點,所以用戶不能給此window發(fā)送點擊事件焦點會傳遞給在其下面的可獲取焦點的window這個flag同時會啟用 FLAG_NOT_TOUCH_MODAL flag , 不管你有沒有手動設(shè)置設(shè)置這個flag同時表明了這個window不會和軟鍵盤交互,(這句話的翻譯我不知道對不對)所以window會獨立于激活的軟鍵盤之上(這句話的意思就是window會在Z軸上置于輸入法之上,所以window可以全屏使用來覆蓋住輸入法,你可以使用FLAG_ALT_FOCUSABLE_IM 來修改這個行為)
FLAG_NOT_TOUCHABLE
這個window永遠無法獲取點擊事件
FLAG_NOT_TOUCH_MODAL
即使這個window是可獲取焦點的,也允許window之外點擊事件傳遞給其他在其之后的indow
如果不設(shè)置這個值,則window消費掉所有點擊事件,不管這些點擊事件是不是在window的范圍之內(nèi)。//如果要做懸浮框,我想這個flag肯定得設(shè)置,但api>=23就別想了。這個flag簡而言之就是說,當前window區(qū)域以外的點擊事件傳遞給下層window,當前window區(qū)域以內(nèi)的點擊事件自己處理
FLAG_TOUCHABLE_WHEN_WAKING
當設(shè)置了這個值,則device休眠的時候,當觸摸屏被點擊,window會收到首次點擊事件,通常當用戶看不見東西時,首次點擊事件會被系統(tǒng)消費
FLAG_KEEP_SCREEN_ON
當這個window對用戶是可見狀態(tài),則保持設(shè)備屏幕不關(guān)閉且不變暗
FLAG_LAYOUT_IN_SCREEN
將window放置在整個屏幕之內(nèi),無視其他的裝飾(比如狀態(tài)欄)window要在考慮到屏幕的其他裝飾來定位其中的內(nèi)容這個flag通常使用Window類的setFlags(int, int)方法來設(shè)置
FLAG_LAYOUT_NO_LIMITS
允許window擴展值屏幕之外
FLAG_FULLSCREEN
當這個window顯示的時候,隱藏所有的裝飾物(比如狀態(tài)欄)這個flag允許window使用整個屏幕區(qū)域當設(shè)置這個flag的window處于頂層的時候,狀態(tài)欄會被隱藏全屏的時候會忽略 softInputMode 變量設(shè)置的SOFT_INPUT_ADJUST_RESIZE 效果,屏幕會不保持全屏且不會resize這個flag可以在主題屬性(theme)中來控制通過 windowFullscreen 屬性來控制
在一些常用的全屏主題中這個屬性已經(jīng)被設(shè)置好了
常用全屏主題: Theme_NoTitleBar_Fullscreen,
Theme_Black_NoTitleBar_Fullscreen,
Theme_Light_NoTitleBar_Fullscreen,
Theme_Holo_NoActionBar_Fullscreen,
Theme_Holo_Light_NoActionBar_Fullscreen,
Theme_DeviceDefault_NoActionBar_Fullscreen,
Theme_DeviceDefault_Light_NoActionBar_Fullscreen.
FLAG_FORCE_NOT_FULLSCREEN
覆蓋FLAG_FULLSCREEN效果,并強制顯示屏幕上的一些裝飾(如狀態(tài)欄)
FLAG_SECURE
把這個window中的內(nèi)容看作需要保護的內(nèi)容,防止被截屏,或防止內(nèi)容顯示在一些不安全的屏幕上
FLAG_IGNORE_CHEEK_PRESSES
這個flag一般用于,當用戶把臉貼在屏幕上,它會過濾不需要的點擊事件,當檢測到一個事件流,這個程序會直接接收到一個CANCEL事件.這樣程序可以正確的處理這種情況,直到手指離開屏幕
FLAG_LAYOUT_INSET_DECOR
這個flag只能配合 FLAG_LAYOUT_IN_SCREEN 一起使用.當在屏幕中請求layout時,window可能在一些裝飾物(如狀態(tài)欄)之上或者之后當使用這個flag時,window manager會報告插入window的矩形大小,來確保你的內(nèi)容不會被裝飾物(如狀態(tài)欄)掩蓋.這個flag一般用Window類的 setFlags(int, int)方法來設(shè)置
FLAG_ALT_FOCUSABLE_IM
轉(zhuǎn)變 FLAG_NOT_FOCUSABLE 設(shè)置的狀態(tài),關(guān)于這個window是怎么和當前的輸入法交互
如果設(shè)置了FLAG_NOT_FOCUSABLE且FLAG_ALT_FOCUSABLE_IM也設(shè)置了,那么當這個window和input method交互的時候會被放置在input method后面或者旁邊.如果FLAG_NOT_FOCUSABLE沒有設(shè)置而設(shè)置了FLAG_ALT_FOCUSABLE_IM,那么window不需要和input method交互,可以放置在輸入法上面
FLAG_WATCH_OUTSIDE_TOUCH
如果你已經(jīng)設(shè)置了FLAG_NOT_TOUCH_MODAL,那么你可以設(shè)置FLAG_WATCH_OUTSIDE_TOUCH這個flag,這樣一個點擊事件如果發(fā)生在你的window之外的范圍,你就會接收到一個特殊的MotionEvent,MotionEvent.ACTION_OUTSIDE注意,你只會接收到點擊事件的第一下,而之后的DOWN/MOVE/UP等手勢全都不會接收到
FLAG_SHOW_WHEN_LOCKED
一個特殊的flag,使得window可以在鎖屏狀態(tài)下顯示,這個flag會使得window比keyguard或其他鎖屏界面具有更高的層級可以配合FLAG_KEEP_SCREEN_ON使用,點亮屏幕,在顯示keyguard window之前顯示你的window.可以配合FLAG_DISMISS_KEYGUARD使用來自動解鎖沒密碼的keyguards這個flag只能應用在最頂層的全屏window上,用人話說就是可以讓window顯示在鎖屏界面上
FLAG_TURN_SCREEN_ON
當window被添加或者顯示,系統(tǒng)會點亮屏幕,就好像用戶喚醒屏幕一樣
FLAG_DISMISS_KEYGUARD
當使用的是無密碼的鎖屏界面,顯示此window會使鎖屏界面被自動解鎖,其他廢話就不翻譯了
FLAG_SPLIT_TOUCH
當window設(shè)置這個flag,window會接收來自window邊界之外發(fā)送給其他window的點擊事件,支持多點觸控.當這個flag沒有設(shè)置的時候,第一下點擊則決定了哪個window會接收整個點擊事件,直到手指拿開.當設(shè)置了這個flag,這每一個點擊事件(不一定是第一個)都決定了那個window來接收剩下的點擊事件,直到手指拿開.點擊事件會被分開傳遞給多個window.貌似是關(guān)于多點觸控的
FLAG_HARDWARE_ACCELERATED
表示這個window是否啟動硬件加速,請求硬件加速但不能保證硬件加速生效。如果僅是用來啟動硬件加速,可以在代碼中控制,使用下面的代碼給指定window啟動硬件加速:
Window w = activity.getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
有一件很重要的事需要記住,這個flag需要在Activity和dialog添加view之前來配置。當你在manifest中設(shè)置了硬件加速后,這個flag不能用來取消硬件加速。當在Activity標簽或者application標簽中設(shè)置了 hardwareAccelerated = true屬性這個flag就自動設(shè)置上了
FLAG_LOCAL_FOCUS_MODE
設(shè)置flag啟用local focus模式(我也不知道local focus mode是什么),在這種模式下window可以不依賴windowmanager獨立的控制焦點,使用window的 setLocalFocus(boolean, boolean) 方法即可通常在這種模式下,window不會通過windowmanager獲取到touch/key event,但是會通過local injection(我不知道這是什么)得到event,by using injectInputEvent(InputEvent) 方法(貌似是手動的強行向一個window插入一個input event)
FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
這個flag表示window負責繪制狀態(tài)欄的北京當設(shè)置了這個flag,系統(tǒng)狀態(tài)欄會變透明,同時這個相應的區(qū)域會被填滿 getStatusBarColor() and getNavigationBarColor()的顏色