2015-02-16 1 views
2

В моем приложении я хочу, чтобы пользователь скрывал или показывал панель навигации (назад, домой, меню). Системная панель (батарея, Wi-Fi, уведомления) всегда должна быть скрыта.Показать панель навигации на Android KitKat после ее утаивания

Я скрыть панель системы с этим кодом:

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

И я успешно скрывает панель навигации с этими флагами:

final static int flagsHide = 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; 

Но я не нашел о том, как показать Панель навигации снова. Могу ли я сделать это с помощью флагов или мне нужно что-то еще? Системная панель должна оставаться невидимой.

ответ

2

Используйте этот флаг для показа снова

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | 
SYSTEM_UI_FLAG_LAYOUT_STABLE 
+0

Привет, спасибо за ответ, но, к сожалению, не делает этого. Панель навигации по-прежнему скрыта. – erinys

+0

см. Здесь здесь https://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int) – Fahim

+0

Придется удалить SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION из этих 3, чтобы заставить его работать. – erinys

0

Это поможет показать панель навигации: -

частная пустота showSystemUI() {

mDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

}

mDecorView это ваш родительский макет. Обратитесь к этой ссылке для получения более подробной информации https://developer.android.com/training/system-ui/immersive.html

0

Full полноэкранного режима

activity.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); 

Восстановления

activity.getWindow() 
     .getDecorView() 
     .setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); 
1

Раствора шахты.

private void hideNavigationBar() { 
    // set navigation bar status, remember to disable "setNavigationBarTintEnabled" 
    final int flags = 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_IMMERSIVE_STICKY; 
    // This work only for android 4.4+ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     getWindow().getDecorView().setSystemUiVisibility(flags); 

     // Code below is to handle presses of Volume up or Volume down. 
     // Without this, after pressing volume buttons, the navigation bar will 
     // show up and won't hide 
     final View decorView = getWindow().getDecorView(); 
     decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { 
      @Override 
      public void onSystemUiVisibilityChange(int visibility) { 
       if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
        decorView.setSystemUiVisibility(flags); 
       } 
      } 
     }); 
    } 
} 

private void showNavigationBar() { 
    // set navigation bar status, remember to disable "setNavigationBarTintEnabled" 
    final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
    // This work only for android 4.4+ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     getWindow().getDecorView().setSystemUiVisibility(flags); 

     // Code below is to handle presses of Volume up or Volume down. 
     // Without this, after pressing volume buttons, the navigation bar will 
     // show up and won't hide 
     final View decorView = getWindow().getDecorView(); 
     decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { 
      @Override 
      public void onSystemUiVisibilityChange(int visibility) { 
       if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
        decorView.setSystemUiVisibility(flags); 
       } 
      } 
     }); 
    } 
} 

Разница removing "View.SYSTEM_UI_FLAG_HIDE_NAVIGATION".

+0

Спасибо, он работает –

0

Лучшее решение используется во всех моих проектах

public final class SystemUIUtil { 

public static void hideDefaultControls(@NonNull final Activity activity) { 
    final Window window = activity.getWindow(); 

    if (window == null) { 
     return; 
    } 

    window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
    window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    final View decorView = window.getDecorView(); 

    if (decorView != null) { 
     int uiOptions = decorView.getSystemUiVisibility(); 

     if (Build.VERSION.SDK_INT >= 14) { 
      uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE; 
     } 

     if (Build.VERSION.SDK_INT >= 16) { 
      uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 
     } 

     if (Build.VERSION.SDK_INT >= 19) { 
      uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     } 

     decorView.setSystemUiVisibility(uiOptions); 
    } 
} 

public static void showDefaultControls(@NonNull final Activity activity) { 
    final Window window = activity.getWindow(); 

    if (window == null) { 
     return; 
    } 

    window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    final View decorView = window.getDecorView(); 

    if (decorView != null) { 
     int uiOptions = decorView.getSystemUiVisibility(); 

     if (Build.VERSION.SDK_INT >= 14) { 
      uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; 
     } 

     if (Build.VERSION.SDK_INT >= 16) { 
      uiOptions &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 
     } 

     if (Build.VERSION.SDK_INT >= 19) { 
      uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     } 

     decorView.setSystemUiVisibility(uiOptions); 
    } 
} 

}

 Смежные вопросы

  • Нет связанных вопросов^_^