如何在Java(Android)中评估这行代码?

San*_*992 1 java android

我正在开发Android开发人员教程" 使用沉浸式全屏模式 "

一切都很好,直到我找到这个代码片段.

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);
}
Run Code Online (Sandbox Code Playgroud)

我对这个setSystemUiVisibility(int)方法有点困惑,因为我不知道如何评估这个条件.

为什么这个方法接收几个整数值?

也许这是关于java语言的一个非常基本的概念,但我之前从未使用过或看过它.

Mat*_*Woo 7

setSystemUiVisibility实际上是接收1个整数.你在这里看到的是位标志.View您看到的所有常量都使用按位或.

这个想法是一个标志代表一个切换:开或关,1或0.表示的标志的典型方式是boolean具有值truefalse.但是boolean占用4个字节(为简单起见),即32位.那么这boolean实际上可以用来表示32个不同的标志,其中32个位置为1或0!与整数(大小为4个字节)相同.因此,让我们使用一个整数来保存一堆标志,并将它们全部设置为0.

然后我们可以使用按位或运算符(|,注1条,而不是2)来指定要设置为"true"的位标志,如下所示:

00000000 | 00100000 = 00100000
00100000 | 00000001 = 00100001
Run Code Online (Sandbox Code Playgroud)

第二个数字显示我们要将哪个标志设置为true.现在您的变量具有值(来自文档):

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
Run Code Online (Sandbox Code Playgroud)

当你将它们全部和按位组合在一起时,你得到0000 1111 0000 0110= 0x0F06= 3846.

注意:为了简单和可读性,我不代表32位.我写的所有二进制数都应该是前导0.万一令人困惑.