0

Я пишу приложение для Android, которое довольно интенсивно использует режим погружения (приложение для киоска, чтобы быть точным). Однако я замечаю, что каждый раз, когда он переключается между действиями, панель навигации появляется в поле зрения на короткое мгновение (недостаточно долго, чтобы быть полезным для обычного пользователя, но достаточно долго, чтобы любопытные пользователи могли нажать кнопку «домой» и легко выйти из киоска заявление).Предотвращение навигации Android и панелей действий при появлении при переключении действий в режиме погружения?

Пример того, как я устанавливаю мою систему видимости флаги:

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

И спасибо за любую помощь.

+0

https://developer.android.com/training/system-ui/immersive.html – ecle

+0

Я прочитал этот документ раньше, и я не видел упоминаний о способах управления этим поведением. Однако, спасибо. – Logic1

+1

Как насчет примера? https://developer.android.com/samples/BasicImmersiveMode/src/com.example.android.basicimmersivemode/BasicImmersiveModeFragment.html – ecle

ответ

0

Вызов setImmersiveMode() в методе следующего действия должен предотвратить кратковременное появление строки состояния и навигационных полос во время переключения.

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 (\ \ разреш значения \ стили .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: windowDisableP обзор "

Теперь моя навигация действует как обычно!

+0

Пожалуйста, не давайте ссылки только для ответов. Вы должны подумать над тем, чтобы добавить соответствующее решение к вашему ответу. В противном случае трудно решить, что именно решило проблему, и всегда возможно, что ссылка опустилась. Дайте кредит, где должен быть кредит. –

+0

Отредактировал свой ответ. –