5

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

我在我的 MainActivity 中包含了以下代码片段,当应用程序启动时,我最初在运行时看到一个带有软键的白屏大约一秒钟,然后当 MainActivity 的线程完成运行时软键消失:

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

...进入应用程序的主题,只有状态栏会准时隐藏,而不是导航栏。我的第二篇文章 -在应用启动时立即隐藏导航栏

4

3 回答 3

5

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

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

我希望这会有所帮助。

于 2017-01-18T20:47:49.417 回答
1

诀窍是在所有全屏活动的 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 及更高版本上测试。启动器活动可能不会立即隐藏导航栏,但从启动器活动启动的所有其他全屏活动在打开时肯定不会显示导航栏。

希望能帮助到你!

于 2018-03-26T09:13:37.207 回答
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" > ...

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);
    }
于 2017-01-18T20:59:28.193 回答