在沉浸式模式下切换活动时,防止出现Android导航和操作栏?

时间:2015-07-03 05:11:43

标签: android android-activity android-actionbar navigationbar

我正在编写一个Android应用程序,它非常广泛地使用沉浸式模式(确切地说是一个自助服务终端应用程序)。然而,我注意到每次它在活动之间切换时导航栏会短暂地弹出视图(对于普通用户来说不够长,但对于好奇的用户来说只需要很长时间就可以按下主页按钮并轻松退出Kiosk应用程序)。

我如何设置系统可见性标志的示例:

@Override
public boolean onTouchEvent(MotionEvent event) {
    setImmersiveMode();
    return super.onTouchEvent(event);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setImmersiveMode();
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    setImmersiveMode();
    return super.dispatchTouchEvent(ev);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        setImmersiveMode();
    }
}

protected void setImmersiveMode() {
    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
                            | View.INVISIBLE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

我就像这样开始我的活动:

Intent intent = new Intent(MyParentActivity.this, MyNextActivity.class);
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("my_var", "some useful stuff");
intent.putExtra(EXTRA_MESSAGE, hashMap);
startActivity(intent);

在当前活动变为空白且下一个活动开始加载的过程中,将出现导航按钮和操作栏。下一个活动加载后,调用setImmersiveMode()方法并有效地将事物设置回所需的可见性状态。如果没有这些Android UI元素闪烁,我无法确定切换活动的方法。

有没有人在遇到任何决心之前遇到过这个问题?

注意:

  • 我使用的设备只有“软按钮”。
  • 我在Android 4.4.2设备上运行我的应用程序。
  • 我在网上做了一些搜索,却找不到任何东西 足以解决这个问题。
  • 我对Android编程比较陌生。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在下一个活动的setImmersiveMode()方法中调用onCreate()可以防止状态栏和导航栏在切换期间短暂显示。

答案 1 :(得分:0)

过去两天我遇到了同样的问题,并在此处找到了我的解决方案:

https://stackoverflow.com/a/37098583/4122679

MyActivity.java

@Override
protected void onResume()
{
   hideAndroidApplicationBar();
}

private void hideAndroidApplicationBar()
{
     final View view = getWindow().getDecorView();
     // Hide Android Soft keys
     view.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 // hide navigation bar
           | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
           | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

Styles.xml(\ res \ values \ styles.xml)

<style name="noTitleBarAndAnimation" parent="android:Theme.NoTitleBar.Fullscreen">
         <item name="android:windowAnimationStyle">@null</item>
         <item name="android:windowTranslucentNavigation">true</item>
         <item name="android:windowDisablePreview">true</item>
</style>

魔术来自“android:windowDisablePreview”

现在,我的导航行为正常!