切换活动时会短暂显示导航栏

时间:2014-09-17 22:08:45

标签: java android nexus-7

我目前正在为Nexus 7平板电脑编写一款具有完全全屏体验的Android应用程序(系统栏和导航栏不会显示,直到用户向下滑动)。

出于某种原因,当我切换活动时,导航栏会重新出现。

要创建全屏效果,我将系统UI可见性设置为每个活动的onResume()中的预定选项,注册UI更改侦听器,并注册窗口焦点侦听器。

用户界面选项

private View decorView = getWindow().getDecorView();

private int uiOptions = 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;

在onResume()

中设置系统UI Visibilility
@Override
protected void onResume() {

    super.onResume();

    decorView.setSystemUiVisibility(uiOptions);

}

在UI更改时设置系统UI可见性

decorView.setOnSystemUiVisibilityChangeListener (
            new View.OnSystemUiVisibilityChangeListener() {

                @Override
                public void onSystemUiVisibilityChange(int pVisibility) {

                    if ((pVisibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                        decorView.setSystemUiVisibility(uiOptions);
                    }

                }

});

窗口具有焦点时设置系统UI可见性

@Override
public void onWindowFocusChanged(boolean pHasFocus) {

    super.onWindowFocusChanged(pHasFocus);

    if(pHasFocus) {
        decorView.setSystemUiVisibility(uiOptions);
    }

}

以上所有内容都是在应用程序的每个活动中完成的,以确保 当键盘消失,活动恢复,隐藏导航栏和状态栏, 等

但是,当我切换时,我仍然遇到导航栏短暂出现的问题 活动。

非常感谢任何帮助!谢谢。

2 个答案:

答案 0 :(得分:3)

您需要使用主题进行应用程序和活动样式,如下所述:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" works on Application level but not at the activity level. Any clue?。这些是在创建视图时应用的,而不是像在你那样在onResume中创建后删除它们。

基本上,您需要为没有标题栏/操作栏的应用程序设置主题(如果您已经有主题,请将其扩展为此主题):

<application
    ...
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</application>

同样适用于每项活动:

<activity

     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
     ...
</activity>

在活动中创建:

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

答案 1 :(得分:0)

我设法解决了我的问题,并删除了我在应用中的一些不必要的代码片段。

全屏制作应用 - 包括隐藏导航和状态栏 - 涉及很多部分:



将Android清单中的应用主题设置为&#34; Theme.NoTitleBar.Fullscreen&#34;
(在AndroidManifest.xml中完成)

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >



为窗口装饰视图和UI选项创建全局变量
(完成所有活动的编程方面)

private View decorView;
private int uiOptions;

注意:在onCreate()

之前不要定义



定义decorView和uiOptions并调用函数在onCreate()中创建UI更改侦听器
(完成所有活动的编程方面)

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    decorView = getWindow().getDecorView();

    uiOptions = 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;

    createUiChangeListener();

}



在onResume()中设置系统UI可见性
(完成所有活动的编程方面)

@Override
protected void onResume() {

    super.onResume();

    decorView.setSystemUiVisibility(uiOptions);

}



从onCreate()调用的createUiChangeListener()函数的代码
(完成所有活动的编程方面)

private void createUiChangeListener() {

    decorView.setOnSystemUiVisibilityChangeListener (
            new View.OnSystemUiVisibilityChangeListener() {

                @Override
                public void onSystemUiVisibilityChange(int pVisibility) {

                    if ((pVisibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                        decorView.setSystemUiVisibility(uiOptions);
                    }

                }

            });

}