在android API中View.setSystemUiVisibility()用于修改各种视图装饰的可见性。
您可以使用标志选择各种功能。
不同的标志有不同的含义,官方文档中有详细记录:setSystemUiVisibility。
如果你不熟悉按位运算,你应该先浏览一下this。
这种表示法是一种非常常见的技术,用于将“集合”编码为单个机器字:
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE
仅设置一个位的数学 OR-ing 机器字将为每两个唯一操作数产生一个唯一值。因此,如果您有一个复合值,您始终可以将其分解回用于生成它的原始值。位必须偏移,否则无法提取原始值。
如果您有两个二进制值,其中只有一位设置了 0001 和 0010,那么对它们进行 OR 运算将产生二进制值 0011。现在您可以传递该机器字,然后在必要时将其分解回两个原始值。
阅读wikipedia 的文章后,您应该能够理解以下内容的工作原理:
int FLAG1 = 0x1; //0001
int FLAG2 = 0x2; //0010
int FLAG3 = 0x4; //0100
// combine using OR
int flags = FLAG1 | FLAG3; //==0101 (5)
// using + is possible as well but can lead to errors:
// flags += FLAG1
// flags now is 0110 but you didn't mean to enable FLAG2
...
// remove a flag
flags &= ~FLAG1;
// toggle a flag
flags ^= FLAG3
// decompose
if(flags & FLAG1)
{
//we know flag1 was set.
}
如果你再次打开android docs,你会看到它为每个标志都提到了一个十六进制的常量值:
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
...
常数值:512 (0x00000200)
SYSTEM_UI_FLAG_LAYOUT_STABLE = 0x00000100 (256)
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x00000200 (512)
这些用于我上面描述的:value | FLAG 请求某些功能,value & ~FLAG 关闭它,value ^ FLAG 切换它。
Android 代码内部的组合值将被分解,并根据您设置的标志启用和禁用各种功能。