setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
答案 0 :(得分: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
)指定第一个参数中的哪些位。 E.g。
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);
表示:&#34;从参数1中的32位中取出参数2中启用的位,并用它们替换attrs.flags
的内容。&#34;
0000 0000 0101 0101
+ .... ..1. .... .... (param1 combined with param2, dots are "masked out")
= 0000 0010 0101 0101
现在还设置了全屏标志。