隐藏通知栏

54

有人知道如何在安卓系统中禁用/隐藏顶部显示电池等信息的通知栏吗?

编辑:请同时添加如何在较新版本的安卓系统中隐藏ActionBar和NotificationBar。


3
你确定你的用户想要这样做吗? - Martin
1
@Martin:我甚至愿意为此付费。 - Sliq
前两个答案也隐藏了ActionBar。如果您只想隐藏通知栏,请参考我的答案。 - Behnam
8个回答

85

你可以在AndroidManifest.xml文件中使用一个主题:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
或者将您的AppTheme的父项更改为@android:style/Theme.NoTitleBar.Fullscreen,像这样:
<style name="AppTheme" parent="Theme.NoTitleBar.Fullscreen">
</style>

然后将这个主题应用于您想要全屏的活动

android:theme="@style/AppTheme"

或者使用以下代码片段:

public class FullScreen
    extends android.app.Activity
{
    @Override
    public void onCreate(android.os.Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

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

        setContentView(R.layout.main);
    }
}

Java代码对我来说无法隐藏通知栏。然而,主题运行良好。 - RockMeetHardplace
谢谢Martin,感谢你提供的两种方法。 - Hassan Jawed
1
您不需要请求FEATURE_NO_TITLE。设置全屏标志就足以隐藏通知栏。因此,您仍然可以使用操作栏并隐藏通知栏。 - Bogdan Alexandru
如果您不打算隐藏ActionBar,请查看此答案:https://dev59.com/eG855IYBdhLWcg3wpmHw#19902500 - Behnam

32

上面的答案也会隐藏ActionBar(操作栏)。 如果你只想隐藏通知栏,请使用以下代码:

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

要小心将其放在setContentView()之前。


这是我找到的最好的方法。 :) - Zia

21
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

6
另一种简单的方法是在您将应用于不需要通知栏的活动的主题上添加<item name="android:windowFullscreen">true</item>,如下所示...
<style name="AppTheme.Splash">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowBackground">@drawable/background_splash</item>
</style>

非常好用


对我来说很有效。比添加弃用标志更好。 - Kirguduck

2

成功地实现了@Martin的建议的略微修改版本,同时使用自定义主题来摆脱状态栏和导航栏。

public class MyActivity extends Activity {

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

    //* Hides Notification Bar
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_my);
}

顶部部分用于去除状态栏。将以下代码添加到您的@styles中,作为资源也可消除NavBar。

 <resources> <style name="NoNav" parent="@android:style/Theme.Holo.Light">
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style> </resources>

在将此添加到您的资源文件后,打开AndroidManifest.xml并将应用程序主题更改为"@style/NoNav"。

消除了Android UI臃肿的软件 :)


1
你可以在4.1或更高版本中使用这个。
View decorView = getWindow().getDecorView();    
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

1
它隐藏了状态栏,但我仍然可以看到颜色为primary dark。 - Srikar Reddy
@SrikarReddy 尝试在您正在向其充气的xml布局文件中删除 android:fitsSystemWindows="true"。对我有帮助。 - Moritz

0
你可以在onCreate()方法中这样做:
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
ActionBar actionBar = getActionBar();
actionBar.hide();

0

这个回答适用于喜欢极简和简化的一行代码的安卓开发者。如果你只想隐藏通知栏,请使用以下代码:

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

请注意,在所需活动的onCreate()函数中的setContentView()之前放置它。

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