2016-07-07 5 views
6

Я ищу, чтобы сделать свой Android-приложение полноэкранным, но отображая только панель навигации Android на определенном экране (экран настроек). Я знаю, что опасно скрывать навигационную панель постоянно на экране, но я хочу знать, возможно ли это. Я искал укоренение своего устройства и использовал фреймворк Xposed.Программно включить/отключить Погружаемый режим

Есть ли способ программно отключить навигационную панель или «липкий режим» и снова включить ее позже?

Редактировать: Я просмотрел Android Immersive Mode, но кажется, что панель навигации все равно покажет, касается ли пользователь касания края. Я хочу удалить любой намек на панель навигации, пока они не перейдут на экран настроек.

ответ

2

Да, это возможно. Используйте приведенный ниже фрагмент кода для достижения желаемой функциональности.

// This snippet hides the system bars. 
private void hideSystemUI() { 
    // Set the IMMERSIVE flag. 
    // Set the content to appear under the system bars so that the content 
    // doesn't resize when the system bars hide and show. 
    View decorView = getWindow().getDecorView(); 
    decorView.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 nav bar 
      | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar 
      | View.SYSTEM_UI_FLAG_IMMERSIVE); 
} 

// This snippet shows the system bars. It does this by removing all the flags 
// except for the ones that make the content appear under the system bars. 
private void showSystemUI() { 
    View decorView = getWindow().getDecorView(); 
    decorView.setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
} 

Для получения более подробной информации обратитесь к ниже Google документации:

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

EDIT 1: Для того, чтобы скрыть его навсегда может быть вы могли бы попробовать что-то вроде этого (Hacky)

decorView.setOnSystemUiVisibilityChangeListener 
       (new View.OnSystemUiVisibilityChangeListener() { 
        @Override 
        public void onSystemUiVisibilityChange(int visibility) { 

          hideSystemUI(); 


        } 
       });` 
+0

Спасибо за ваш ответ. Я смотрел на это, прежде чем я отправил сообщение, но мой вопрос с Immersive Mode состоял в этой строке: «Пользователь может отображать системные бары с внутренним ударом вдоль области, где обычно появляются панели системы». Разве это не заменит hide()? Я хочу отключить это, пока пользователь не перейдет на экран настроек. – Jason

+0

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

+0

Правильно, и я не хочу, чтобы они закрывали полноэкранный режим *, если * они не идут на один из моих других экранов. Вот в чем мой реальный вопрос. Я хочу, чтобы пользователь полностью не дошел до панели навигации, пока не перейдет на определенный экран. – Jason

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