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

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个回答

198

将此代码写在您的 Activity 中

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

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

查看文档: https://developer.android.com/training/system-ui/status.html

这样做可以使你的应用程序全屏,没有状态栏、标题栏。:)


33
请注意,如果您的活动超类在onCreate方法中调用setContentView,则此方法将无法起作用 - 应用程序将因异常而退出。 - Ben Clayton
1
@Ron 我是在 API 级别 8 上进行测试的。可能在其他级别上行为不同? - Ben Clayton
1
这仍然可以防止在显示软键盘时屏幕滚动。 - Bitcoin Cash - ADA enthusiast
注意,在setContentView()之后调用它。此外,最好使用addFlags()保存先前的标志。 - M. Usman Khan
8
super.onCreate(savedInstanceState);之前使用它,如果出现崩溃。 - David
显示剩余5条评论

25

使用这段代码可以隐藏您的应用程序中的状态栏,而且易于使用。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

21
使用主题 "Theme.NoTitleBar.Fullscreen",并在 AndroidManifest.xml 中的活动中尝试设置 "android:windowSoftInputMode=adjustResize"。 你可以在这里找到详细信息。

通过上述方法,当应用程序全屏运行时,我的状态栏可以隐藏,但是在我向下滑动页面时仍然可以看到状态栏。如果我不想要状态栏,有没有办法? - Hazel Wang

20
 if (Build.VERSION.SDK_INT < 16) {
   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 } else {
     View decorView = getWindow().getDecorView();
      int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
      decorView.setSystemUiVisibility(uiOptions);
      ActionBar actionBar = getActionBar();
      actionBar.hide();
 }

3
我注意到当我使用这种方法时,显示软键盘会将位于editText上方的视图移动,而不是调整大小。如何修复这个问题? - android developer

15
如果您需要在一个活动中使用此代码,您需要将其放在 setContentView 之前的 onCreate 方法中:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.your_screen);

1
这种方式可以让键盘覆盖输入框在Webview中。 - Allen Vork
@AllenVork 有什么解决方案吗? - Ishaan Kumar

12

将以下内容添加到您的Activity类中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    // some your code
}

10
如果你想隐藏状态栏,可以在Activity的onCreate方法中或者Fragment的onCreateView/onViewCreated方法中进行。
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

在退出Activity时不要忘记清除标志,否则在访问此Activity后,整个应用程序将会出现全屏幕。 要清除,请在onDestroy(对于Activity)或onDestroyView(对于Fragment)中执行此操作。

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

9

使用此代码来处理你的Activity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

8

如果你正在使用更高级的API,那么你可能已经注意到了上面提到的标志,即FLAG_FULLSCREENSYSTEM_UI_FLAG_FULLSCREEN已被弃用。

要覆盖整个屏幕,您可以定义一个自定义主题:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="ActivityTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowFullscreen">true</item>
    </style>
</resources>

manifest中的activity添加主题,例如:android:theme="@style/ActivityTheme",然后就完成了。 注意:您也可以在清单文件中直接添加预定义的@android主题:android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"。在这种情况下,请确保您的activity扩展为Activity()而不是AppCompatActivity(),虽然这并不推荐。

7
void hideStatusBar() {
        if (Build.VERSION.SDK_INT < 16) {
           getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        } else {
            View decorView = getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }

你可以使用此方法来隐藏状态栏。同时,隐藏操作栏也很重要。在这种情况下,如果你已经从支持库(如Appcompat)扩展了活动,则可以使用getSupportActionBar().hide();或者在上述方法后直接调用getActionBar().hide()即可。谢谢。

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