在应用启动时立即隐藏状态和导航栏

时间:2017-01-18 20:36:11

标签: android runtime launch android-statusbar android-navigation-bar

我想知道是否有办法在应用启动时隐藏Android设备的软键(状态和导航栏)?例如,在品牌,标题和主菜单屏幕之前,在运行时隐藏软键的同时,最初显示黑屏的游戏。

我在MainActivity中包含了以下代码段,当应用启动时,我最初在运行时看到一个白色的屏幕 软键大约一秒钟,然后当MainActivity&时,软键会消失#39; s线程完成运行:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

非常感谢。

* 2017年1月19日更新:* 包括:

之后
<item name="android:windowFullscreen">true</item>

...进入应用程序的主题,状态栏按时隐藏,而不是导航栏。我的第二篇文章 - Hiding the navigation bar immediately on app launch

3 个答案:

答案 0 :(得分:3)

查看你的styles.xml并添加项目android:windowFullscreen。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowFullscreen">true</item>
</style>

我希望有所帮助。

答案 1 :(得分:0)

有几种方法(在此描述 - https://developer.android.com/training/system-ui/status.html):

1)在你的活动的onCreate()方法中再次调用setSystemUiVisibility()。

2)适用于Android 4.0及更低版本。您可以在XML布局中更改主题,如下所示:     ...     android:theme =“@ android:style / Theme.Holo.NoActionBar.Fullscreen”&gt;     ...

3)适用于Android 4.0及更低版本。隐藏Activity onCreate(Bundle savedInstanceState)方法中的状态栏。以下是上述网站的一个例子:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

答案 2 :(得分:0)

诀窍是在所有全屏活动的onCreate()方法中,在 super.onCreate(savedInstanceState)之前设置沉浸式模式标志

@Override
 protected void onCreate(Bundle savedInstanceState) {
     hideSystemUI(getWindow());   //this hides NavigationBar before showing the activity

     super.onCreate(savedInstanceState);

     setContentView(R.layout.activity_main); 
     ...
}

也不要忘记在所有全屏活动中添加以下代码

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    hideSystemUI(getWindow());
}

public static void hideSystemUI(Window window) {
    window.getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LOW_PROFILE
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    );
}

并在styles.xml

中的活动主题中添加以下行
<style name="FullScreenAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     ...

     <item name="android:windowFullscreen">true</item>
     <item name="android:windowTranslucentNavigation">true</item>
</style>

此功能适用于android api 19及更高版本。在api 21及以上测试。启动器活动可能不会立即隐藏导航栏,但启动器活动启动的所有其他全屏活动肯定不会在打开时显示导航栏。

希望它有所帮助!