如何在Android中检查状态栏是否可见

3
我想要实现的目标是,除非用户按下提供的按钮之一,否则用户无法退出活动状态。我已经捕获了主页和返回按钮,但当我尝试删除状态栏时,问题就开始了。 我想要以下之一:
  • 在Activity2中始终隐藏状态栏
  • 状态栏不可访问,它是可见的,但您无法激活它(以来电屏幕为例)
  • 如果我选择解决方案1,那么如果我的应用正在运行并且Activity1正在显示状态栏,则Activity2会在状态栏下显示,状态栏会覆盖Activity2的顶部,除非我从另一个应用程序启动Activity2,否则Activity2不会显示状态栏。 Status bar overlays Activity2 No Status Bar visible here 我做错了什么?
    AndroidManifest.xml的一部分:
            <activity
            android:label="@string/app_name"
            android:launchMode="standard"
            android:name=".Activity1"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
        <activity
            android:label="@string/app_name"
            android:launchMode="standard"
            android:name=".Activity2"
            android:noHistory="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter >
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.MONKEY" />
            </intent-filter>
        </activity>
    

    1
    你想要的功能并不适用于所有设备。例如,在平板电脑上,你无法去除系统栏。在Kindle Fire上,由于类似的原因,你也无法去除菜单栏。 - CommonsWare
    现在它只会在手机上使用。那么,阻止状态栏呢?就像 Android 在有来电时所做的那样? - Michael van der Horst
    1
    据我所知,SDK应用程序无法做到这一点。Android的一个指导原则是让用户保持控制。而你尝试做的明显指导原则是出于某种原因剥夺用户的控制权。这些原则将不能很好地共存。 - CommonsWare
    3个回答

    4

    要检查状态栏的可见性,请尝试此代码:

    public boolean isStatusBarVisible() {
        Rect rectangle = new Rect();
        Window window = getActivity().getWindow();
        window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
        int statusBarHeight = rectangle.top;
        return statusBarHeight != 0;
    }
    

    在setContent之后立即执行,这会是false吗? - Raii

    2

    这不是问题所在。我正在使用默认主题。但是,如果我从Activity1转到Activity2,状态栏仍然会显示。 - Michael van der Horst
    你在切换到 Activity2 后关闭了 Activity1 吗? - yonilx
    这确实帮了我一点。我必须在android:launchMode="singleInstance"中启动我的活动,然后在OnAttachedToWindow()中调用this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); - Michael van der Horst

    1

    我必须在android:launchMode="singleInstance"中启动我的活动,并在OnAttachedToWindow()中调用this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD)。 现在,即使同一应用程序中的其他活动显示状态栏,状态栏也不会显示。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接