我正在开发Android开发人员教程" Using Immersive Full-Screen Mode"
在找到此代码段之前一切正常。
private void hideSystemUI() {
// Set the IMMERSIVE flag.
// Set the content to appear under the system bars so that the content
// doesn't resize when the system bars hide and show.
mDecorView.setSystemUiVisibility(
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);
}
我对setSystemUiVisibility(int)
方法有点困惑,因为我不知道如何评估这种情况。
为什么这个方法接收几个整数值?
也许这是关于java语言的一个非常基本的概念,但我以前从未使用或看过它。
答案 0 :(得分:7)
setSystemUiVisibility
实际上是接收1个整数。你在这里看到的是位标志。您看到的所有View
常量都是使用按位或。
这个想法是一个标志代表一个切换:开启或关闭,1或0.表示该标志的典型方式是boolean
,其值为true
和false
。但是boolean
占用4个字节(为简单起见),即32位。那么这个boolean
实际上可以用来表示32个不同的标志,其中32个位置为1或0!与整数(大小为4个字节)相同。因此,让我们使用一个整数来保存一堆标志,并将它们全部设置为0。
然后我们可以使用按位或运算符(|
,注1条,而不是2)来指定要设置为“true”的位标志,如下所示:
00000000 | 00100000 = 00100000
00100000 | 00000001 = 00100001
第二个数字显示我们要将哪个标志设置为true。现在您的变量具有值(来自documentation):
View.SYSTEM_UI_FLAG_LAYOUT_STABLE = 0x0100 = 0000 0001 0000 0000
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x0200 = 0000 0010 0000 0000
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 0x0400 = 0000 0100 0000 0000
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x0002 = 0000 0000 0000 0010
View.SYSTEM_UI_FLAG_FULLSCREEN = 0x0004 = 0000 0000 0000 0100
View.SYSTEM_UI_FLAG_IMMERSIVE = 0x0800 = 0000 1000 0000 0000
当您将它们全部按位或按位组合时,您得到0000 1111 0000 0110
= 0x0F06
= 3846。
注意:为简单起见,我不代表32位。我写的所有二进制数都应该是前导0。如果这令人困惑。