18

У меня есть приложение, которое я хочу запустить в полноэкранном режиме. Если у меня есть устройство с 4.4 KitKat, то легко установить SYSTEM_UI_FLAG_IMMERSIVE, чтобы приложение стало чистым полноэкранным. Однако, если у меня есть устройство с более низким API, чем 4.4. Я понятия не имею, как сделать его полноэкранным, как будто это KitKat с поддержкой Immersive.Иммерсивный полноэкранный режим ниже 4.4

Я могу установить полноэкранный режим и скрыть навигационные флаги, чтобы приложение появилось в полноэкранном режиме, но как только на экран щелкнут, эти флаги будут сброшены и теперь будут отображаться как панель навигации, так и строка состояния.

Есть ли решение, в котором я могу «имитировать» режим погружения на устройствах с JB и, возможно, ICS (не обязательно ниже).

У меня есть метод hideSystemUI, который запускается при запуске OnSystemUiVisibilityChangeListener триггеров, которые выглядят так.

private void hideSystemUI() { 
     actionBar.hide(); 
     isMenuVisible = false; 
     if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){ 
      mDecorView.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); 
     } 
     else{ 
      mDecorView.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); 
     } 
} 

Какие изменения мне нужно сделать, чтобы сделать приложение идти на весь экран, а не показывать Navbar и строку состояния на каждый клик, а на слайде сверху или снизу.

+0

Почему, по вашему мнению, Google добавит определенные флаги для режима immersive, если это возможно с существующими флагами? – ianhanniballake

+3

Ну, конечно, они добавили флаг, потому что флаги не могли решить эту проблему. Как приложения таргетинга <4.3 разрешают полноэкранный режим? Я мог бы жить с видимым навигатором, но я бы хотел показать панель состояния + панель действий на слайде. Это возможно вообще или мне нужно переосмыслить? @ianhanniballake – jdahlgren

+0

@jdahlgren вы нашли решение? –

ответ

-3

Есть два способа погружения режима
Чтобы сделать его остается погружениями меняется thid линии

View.SYSTEM_UI_FLAG_IMMERSIVE 

По этой линии-

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
1

я столкнулась с той же ситуацией, и после некоторых исследований я понял, что это невозможно в 4.4 из-за проблем с безопасностью, поэтому старые API не поддерживают скрытие панели навигации так, как вы хотите. Несмотря на то, что использование API SYSTEM_UI_FLAG_LAYOUT_STABLE в API 4.1 вашего макета не будет изменяться, и оно будет раздуваться за панель навигации, но вы должны убедиться, что ни один из ваших важных компонентов пользовательского интерфейса не покрыт им.

https://developer.android.com/training/system-ui/immersive.html Надеюсь, что это помогает .. :)

0

просто скопировать прошлое ниже код в значение/style.xml.

<resources> 


<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 

</style> 

<!-- Application theme. --> 
<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowContentOverlay">@null</item> 

</style> 

2

Это так близко, как вы собираетесь получить:

if (Build.VERSION.SDK_INT >= 19) { 
    getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
} else { 
    if (Build.VERSION.SDK_INT > 10) { 
     findViewById(android.R.id.content).setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); 
     getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); 
    } 
} 

не поддерживает устройства с SDK менее 10. Эти шутники должны получить современный андроид в любом случае.

+2

Неэффективно делать грубые комментарии о пользователях, использующих старую версию API по любой причине. – hotzst

+3

Я думал, что это технический форум, а не социальный. Серьезно, SDK 10 - Gingerbread. Учитывайте дистрибутив .2% Froyo, и мы говорим о 3,2% всех устройств (http://developer.android.com/about/dashboards/index.html). – ShellDude

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