如何在安卓系统中隐藏状态栏

137
我参考了这个链接 link。如果用户点击EditText(例如“到:”),键盘将弹出,同时用户可以滚动查看屏幕上的所有其他视图(例如撰写、主题、发送按钮)。同样,在我的应用程序中,我有一个活动,在其中我拥有一些小部件或视图。 假设用户点击我的Activity中的EditText,则会弹出键盘,并且我可以滚动以查看其余视图。但是,如果我在清单中添加此属性android:theme="@android:style/Theme.NoTitleBar.Fullscreen",我无法滚动来查看其余视图。但是,如果我像这样在清单中添加属性android:theme="@android:style/Theme.NoTitleBar",那么我就可以滚动以查看其余视图,但该屏幕上会出现状态栏。我希望能够全屏并且即使弹出键盘也可以滚动查看其他视图...?我需要做哪些更改..?

3
请注意,在Android 3.0中,您无法隐藏状态栏,并且有很大可能您将来也无法隐藏状态栏。在Android 3.0中,状态栏包含后退和主页按钮,因此状态栏必须始终可用。 - CommonsWare
我刚刚成功地在3.0版本,API级别11的模拟器上隐藏了标题栏和状态栏。 - erdomester
全屏应该仍然允许,用户通常不想在玩全屏游戏时看到状态栏。 - Sam YC
@user448250 你最终找到答案了吗? - Bitcoin Cash - ADA enthusiast
活动是什么?它是您网站文件夹中的某个XML文件吗? - Nebular Dust
37个回答

2
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setTheme(R.style.Theme_AppCompat_Light_NoActionBar);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    , WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity__splash_screen);
}

虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Dharman
我并不太清楚AppCompat到底是什么,只是一直在使用它。而这三行代码就完成了任务。 - user3156040
遗憾的是,像往常一样,谷歌自己的文档在如何实现这一点方面是不正确的。也许他们应该复制粘贴这段代码。 - zeeshan

2
包括 Android API 30,在我这里运行正常。
if (Build.VERSION.SDK_INT < 16) {
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
    } else if (Build.VERSION.SDK_INT < 30) {
        window.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
        actionBar?.hide()
    } else {
        window.decorView.windowInsetsController?.hide(WindowInsets.Type.statusBars())
    }

1

0

这个解决方案对我有用 :)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= 19) {
           getWindow().setFlags(AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT, AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT);
           getWindow().getDecorView().setSystemUiVisibility(3328);
    }else{
           requestWindowFeature(Window.FEATURE_NO_TITLE);
           this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    DataBindingUtil.setContentView(this, R.layout.activity_hse_video_details);

0
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // If the Android version is lower than Jellybean, use this call to hide
    // the status bar.
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } else {
       View decorView = getWindow().getDecorView();
       // Hide the status bar.
       int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
       decorView.setSystemUiVisibility(uiOptions);
       // Remember that you should never show the action bar if the
       // status bar is hidden, so hide that too if necessary.
       ActionBar actionBar = getActionBar();
       actionBar.hide();
    }

    setContentView(R.layout.activity_main);

}
...
}

0

在 Style.xml 文件中添加或替换

<item name="android:statusBarColor">@android:color/transparent</item>

0

我们可以使用setSystemUiVisibility()在Android 4.1(API级别16)及更高版本中隐藏状态栏。

window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

根据谷歌文档,如果状态栏被隐藏了,我们就不应该显示操作栏,因此必要时也要将其隐藏。
actionBar?.hide()

0

以下是如何隐藏状态栏的方法 在您的 Helper Object 类中使用此函数,并在 activity 中调用它

    fun hideStatusBar(window: Window, context: Context){
    if (SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        window
            .decorView
            .systemUiVisibility =
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        window.statusBarColor = ContextCompat.getColor(context, R.color.transparent_bg_color)
    } else {
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }
}

在设置内容视图之前,在您的 Activity 中调用它。

hideStatusBar(window, this)
setContentView(R.layout.activity_detail)

0
将以下代码添加到themes.xml文件中。它将使通知抽屉半透明。
<item name="android:windowTranslucentStatus">true</item>

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community
你好!考虑添加一些注释或口头解释你正在做什么。 - Abhishek Dutt

0

我知道我回答得很晚。 我在一个相关的Java文件中使用以下代码片段来实现这个目的

Objects.requireNonNull(getSupportActionBar()).hide();

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