2015-04-21 5 views
2

Как я могу обнаружить наличие навигационной панели и скрыть ее?Android: обнаружение видимости навигационной панели

В моих onCreate() я называю hideNavigationBar() метод, чтобы скрыть панель навигации, а затем зарегистрировать слушатель, чтобы скрыть панель навигации, каждый раз, когда оно становится видимым, когда пользователь прикасается в любом месте на экране, как сообщает documentations. Когда панель навигации становится видимой после события касания, метод hideNavigationBar() снова вызывается слушателем, но он не действует, панель все еще видна.

Это мой onCreated() метод:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     hideNavigationBar(); 

     View decorView = getWindow().getDecorView(); 
     decorView.setOnSystemUiVisibilityChangeListener 
       (new View.OnSystemUiVisibilityChangeListener() { 
        @Override 
        public void onSystemUiVisibilityChange(int visibility) { 
         if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
          Toast.makeText(getApplicationContext(), "Visible", Toast.LENGTH_SHORT).show(); 
          hideNavigationBar(); 
         } else { 
          Toast.makeText(getApplicationContext(), "Not visible", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
    } 

и это мой hideNavigationBar() метод:

private void hideNavigationBar() { 

     Toast.makeText(getApplicationContext(), "hideNavigationBar()", Toast.LENGTH_SHORT).show(); 

     View decorView = getWindow().getDecorView(); 
     int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_FULLSCREEN; 
     decorView.setSystemUiVisibility(uiOptions); 
    } 

Как я могу скрыть панель навигации каждый раз, когда он становится видимым?

Благодаря

+0

панель действий или панель навигации? –

+0

@AsifMujteba навигационная панель – Stephan

+0

Возможный дубликат [Проверить навигационную панель] (http://stackoverflow.com/questions/16092431/check-for-navigation-bar) – Sufian

ответ

2

это сделать:

boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey(); 
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); 

if(!hasMenuKey && !hasBackKey) { 
    // Do whatever you need to do, this device has a navigation bar 
} 

Оригинальный ответ Check for navigation bar

+0

Это возвращает, имеет ли устройство мягкую навигационную панель или нет. – ImMathan

0

Попробуйте позвонить hideNavigationBar() в Runnable с помощью View.post(Runnable). Например:

... 
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
    decorView.post(new Runnable() { 
     @Override 
     public void run() { 
      hideNavigationBar(); 
     } 
    }); 
} 
... 
0

вы можете добавить этот код в метод вашей деятельности в OnCreate():

 View decorView = getWindow().getDecorView(); 
    decorView.setOnSystemUiVisibilityChangeListener 
      (new View.OnSystemUiVisibilityChangeListener() { 
       @Override 
       public void onSystemUiVisibilityChange(int visibility) { 
        if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {     
         // TODO: The navigation bar is visible. Make any desired 
         // adjustments to your UI, such as showing the action bar or 
         // other navigational controls. 
         hideNavigationBar() 

        } else { 
         // TODO: The navigation bar is NOT visible. Make any desired 
         // adjustments to your UI, such as hiding the action bar or 
         // other navigational controls. 
        } 
       } 
      }); 

Это вообще хорошая практика, чтобы сохранить ваш пользовательский интерфейс в синхронизации с изменением видимости системы бар. Например, вы можете использовать этот прослушиватель, чтобы скрыть и показать панель действий вместе со строкой состояния и отображением. Android-Responding to UI Visibility Changes

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