2015-11-27 43 views
0
setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
+0

你從哪裏得到這個信息? – Androiderson

+0

由於掩碼是奇數。 '(-1,FLAG_FULLSCREEN)'應該是相同的。 http://developer.android.com/reference/android/view/Window.html#setFlags%28int,%20int%29 – zapl

+0

@zapl你的意思是說位掩碼是or'ed正確? – itsom

回答

0
public void setFlags(int flags, int mask) { 
    final WindowManager.LayoutParams attrs = getAttributes(); 
    attrs.flags = (attrs.flags&~mask) | (flags&mask); 
    mForcedWindowFlags |= mask; 
    dispatchWindowAttributesChanged(attrs); 
} 

source

兩個int參數組合使用指定窗口標誌字段的比特設置哪個。

第一個是要複製的源,例如,

0000 0010 0000 0000 

但是,這本身是不夠的,因爲程序無法知道這些位應該被複制,並且在你想保留目標字段。也許你甚至想要設置一個是0

所以第二個參數(mask)指定了第一個參數中的哪些位。例如。

0000 0011 0000 0000 

就意味着你要複製的第7和第8位

0000 0010 0000 0000 
0000 0011 0000 0000 
------------------- 
.... ..10 .... .... << sets those to bits two 10 while the rest remains untouched 

使用標誌的效果兩次是

0000 0010 0000 0000 
0000 0010 0000 0000 
------------------- 
.... ..1. .... .... 

只是一個指定你真正的意思的方式那一點標誌。你可以在flags字段中使用全1。


假設最初的attrs.flags(當前活動窗口的標誌)的值是

0000 0000 0101 0101 
    ^^^^- FLAG_ALLOW_LOCK_WHILE_SCREEN_ON is enabled 
     | | | 
     | | |--- another enabled feature 
     | | 
     | -------- a flag that isn't set. 
    assume this is FLAG_FULLSCREEN 

現在你要設置只是失蹤1位,但FLAG_FULLSCREEN是一個完整的32位int。如果你只是簡單地覆蓋所有的東西,你會失去所有設置好的其他位。

setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

意思是:「在從1參數的那些32位取我在參數2使能的位和替換的attrs.flags與它們的內容。」

0000 0000 0101 0101 
    + .... ..1. .... .... (param1 combined with param2, dots are "masked out") 
    = 0000 0010 0101 0101 

現在全屏標誌也被設置。

+0

行知道了thx ... – itsom

相關問題