如何在Android中隐藏状态栏


103

我提到了这个链接。在这种情况下,如果用户单击EditText(例如,To To),则会弹出键盘,同时用户可以滚动查看所有剩余的视图(例如:compose,subject,send按钮)。该屏幕。同样,在我的应用程序中,我有一个活动,就是我有一些小部件或视图。假设如果用户单击“我的活动”中的Edittext,则弹出键盘,并且我可以滚动查看其余视图。但是,如果我android:theme="@android:style/Theme.NoTitleBar.Fullscreen"在清单中指定此属性,则无法滚动以查看其余视图,但是如果Give属性android:theme="@android:style/Theme.NoTitleBar"像清单中这样,我可以滚动查看剩余的视图,但是该屏幕上有状态栏,这里我要全屏显示,即使弹出键盘,也可以滚动查看剩余的视图..?为此我需要做哪些更改?


3
@ user448250:请注意,您无法在Android 3.0中隐藏状态栏,并且很有可能无法继续隐藏状态栏。在Android 3.0中,状态栏包含BACK和HOME按钮,因此状态栏需要始终可用。
CommonsWare

我刚才设法躲都与3.0模拟器标题和状态栏,API等级11
erdomester

应该仍然允许全屏显示,用户在玩全屏游戏时通常不希望看到状态栏。
GMsoF 2013年

@ user448250你有没有发现这个?
蒂亚戈

什么是活动?它在您的网站文件夹中有一些xml文件吗?
星尘2015年

Answers:


170

在你的活动中写

@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

然后您的应用将进入全屏状态。没有状态栏,没有标题栏。:)


29
请注意,如果您的活动超类在onCreate方法中调用setContentView,则此方法将不起作用-该应用程序将异常退出。
本·克莱顿

1
我在API级别8上进行了@Ron测试。其他级别的行为是否可能不同?
本·克莱顿

这对从2.3.x到4.x的所有版本都有效吗?
Kostadin

1
当显示软件键盘时,这仍然可以防止屏幕滚动。
蒂亚戈

2
super.onCreate(savedInstanceState);如果它崩溃,请在使用前使用它
大卫

19
 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开发人员

19

使用主题"Theme.NoTitleBar.Fullscreen"并尝试在中设置"android:windowSoftInputMode=adjustResize"活动。AndroidManifest.xml.您可以在此处找到详细信息。


通过上述方法,当应用全屏运行时,我的状态栏可以隐藏,但是,在向下滑动页面时,我仍然可以看到状态栏。如果我根本不需要状态栏,有办法吗?
榛王

13

使用此代码可在您的应用中隐藏状态栏,并且易于使用

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

12

如果您需要在一个活动中执行此操作,则必须在setContentView之前放入onCreate:

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

setContentView(R.layout.your_screen);

1
这种方式使键盘覆盖了Webview中的输入字段。
艾伦·沃克

@AllenVork任何解决方案?
Ishaan Kumar

12

将此添加到您的活动类

@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
}

8

用它来做你的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);
}

6
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()。谢谢


6

manifest.xml文件中更改应用程序的主题。

android:theme="@android:style/Theme.Translucent.NoTitleBar"

奇怪的是,这在屏幕顶部显示了一个橙色条。通知栏是隐藏的。
丹麦阿什法克2014年

6

如果要隐藏状态栏,请在onCreate(用于Activity)和onCreateView / onViewCreated(用于Fragment)中执行此操作

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

并且不要忘记在退出活动时清除标志,否则在访问该活动后您将在整个应用程序中拥有全屏显示。要在onDestroy(用于Activity)或onDestroyView(用于Fragment)中清除此操作

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

5

使用此代码:

requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.youractivityxmlname);

4

此代码隐藏状态栏。

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

隐藏操作栏,请写这行:

requestWindowFeature(Window.FEATURE_NO_TITLE);

这两行可以共同编写以隐藏操作栏和状态栏。所有这些行必须在setContentView方法调用onCreate方法之前编写。


做工精美。谢谢!
约书亚·品特

3

在要使用的活动中的AndroidManifest.xml->中,添加以下内容:

android:theme="@style/Theme.AppCompat.Light.NoActionBar"
//this is for hiding action bar

然后在MainActivity.java-> onCreate()方法内,添加以下内容:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//this is for hiding status bar

3

您可以使用styles.xml隐藏

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="HiddenTitleTheme" parent="AppTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

像这样在你的清单中称呼它 android:theme="@style/HiddenTitleTheme"


2

您可以通过使用xml将状态栏的颜色设置为透明来隐藏状态栏。将statusBarColor项目添加到您的活动主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

请添加一些解释代码,只有答案对其他人有些困惑
Ram Ghadiyaram

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

可惜的是,与往常一样,Google自己的文档在实现此目标方面是错误的。也许他们应该复制粘贴此代码。
zeeshan


0

我们无法阻止状态在(4.4+)kitkat或更高版本的设备中以全屏模式显示,因此请尝试破解以阻止状态栏扩展。

解决方案很大,所以这是SO的链接:

StackOverflow:使用全屏模式隐藏android 4.4+或kitkat中的状态栏


我认为您错了,请查看有关隐藏状态栏的官方信息developer.android.com/training/system-ui/status.html
Jose Ricardo Citerio Alcala

Jose,我将检查给定链接上的信息,并在需要时更新答案。这个问题/答案是一年前添加的,当时还没有针对这种情况的官方解决方案。可能在下一发行版或版本中google / android已添加相同的API /方法。如果他们提供了解决方案,那就很高兴了。谢谢!
乔伊

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

用于 Manifest

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"

大概取决于主题。以我为例,发生了异常:“ java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)。”
CoolMind

0

在res-> values-> styles.xml下

里面的样式身体贴标签

<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>

0

如果您引用Google文档,则可以在android 4.1及更高版本中使用此方法,请在setContentView()之前调用此方法

public void hideStatusBar() {
    View view = getWindow().getDecorView();
    int uiOption = View.SYSTEM_UI_FLAG_FULLSCREEN;
    view.setSystemUiVisibility(uiOption);
    ActionBar actionBar = getActionBar();
    if (actionBar != null) {
        actionBar.hide();
    }
}

-1
requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

你好!考虑添加一些您正在做的评论或口头解释。
乔治,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.