android - android中只显示状态栏?

标签 android android-statusbar

我希望应用程序仅显示状态栏,并在 IMMERSIVE_STICKY 中显示导航栏模式。尝试了很多方法,但不知何故,导航栏保留下来,状态栏被隐藏。 Material 主题是否会干扰全屏功能?

尝试了同一问题的其他相关问题,但他们以 hacks 的形式解决了问题,而且解决方案的 API 版本也较旧。这是我的主题属性和相关设置代码:

<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">

        <item name="windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>```

最佳答案

根据docs在这里,您需要使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION为了隐藏底部导航栏。它们还传递 SYSTEM_UI_FLAG_FULLSCREEN 标志,因为在隐藏导航栏时隐藏状态栏是一种很好的做法。

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

如果我正确解释了问题,您的要求不是隐藏状态栏,而是隐藏导航栏。因此,您不应该在任何地方传递全屏标志。从上面的代码 fragment 中删除它,并从主题中删除 android:windowFullscreen 。这应该会使状态栏像往常一样显示。

所以你实际的uiOptions将是

int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

注意:如文档中所述,IMMERSIVE_STICKY 仅确保导航栏区域中的任何触摸事件/手势也传输到应用程序。如果用户滑动,它仍然会显示半透明的导航栏。正如 other answers 中提到的,如果没有某种形式的 root 访问权限,就不可能完全删除它。


编辑:我最初使用 AppCompatActivity 和默认的 Theme.AppCompat.Light.NoActionBar 主题对此进行了测试。还使用 OP 的 android:Theme.Material.Light.NoActionBar 进行了测试(需要使用 Activity 而不是 AppCompatActivity)。他们俩都工作了。

关于android - android中只显示状态栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56596868/

相关文章:

android - 如何撤消对窗口装饰 View 的更改?

android - 在发布我的应用程序之前是否需要删除开发插件?

android - 为什么当应用程序主题更改时我的应用程序崩溃

android - OpenCV Android相机不是全屏

android - 如何在Android(2016)中与社交网络(Whatsapp,Facebook)共享音频?

android - 当 SystemUI 在 Android Boot 中加载时

android - 将窗口SystemUiVisibility设置为SYSTEM_UI_FLAG_LIGHT_STATUS_BAR时,全屏DrawerLayouts如何影响将 fragment 添加到后堆栈?

android - 如何实现半透明StatusBar和ActionBar的无缝过渡?

android - 不能写.bashrc来添加android NDK的路径

java - 尝试在 Android 中打开资源文件时出错