2015-10-26 4 views
4

Я ищу способ, в котором строка состояния полностью прозрачна, а не полупрозрачна, и где панель навигации остается нетронутой.Android Потяните за строку состояния, но не за навигационной панелью

Ближайший я могу получить, чтобы использовать флаг

WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

, но это привлекает за навигационную панель, а также.

Фон - это то, что делает это сложным, это тонкий градиент, и когда я устанавливаю цвет строки состояния в начало градиента, он выглядит почти правильно, но имеет тонкую линию в верхней части экрана ,

Есть ли хороший способ подогнать деятельность к окну, только сверху, но если есть панель навигации внизу, оставьте ее в покое?

ответ

10

Хороший подход - метод один от this answer.

Для достижения бара полностью прозрачного состояния, вы должны использовать statusBarColor, который доступен только на API 21 и выше. windowTranslucentStatus доступен по API 19 и выше, но он добавляет тонированный фон для строки состояния. Однако установка windowTranslucentStatus делает достичь одну вещь, что изменение statusBarColor к прозрачному не делает: он устанавливает SYSTEM_UI_FLAG_LAYOUT_STABLE и SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN флаги. Самый простой способ получить тот же эффект - это вручную установить эти флаги , что эффективно отключает вставки, наложенные системой компоновки Android , и оставляет вас на произвол судьбы.

Вы называете эту строку в OnCreate метод:

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

Не забудьте также установить прозрачность в /res/values-v21/styles.xml:

<item name="android:statusBarColor">@android:color/transparent</item> 

Или установить прозрачность программно:

getWindow().setStatusBarColor(Color.TRANSPARENT); 

хорошая сторона этого подхода состоит в том, что одни и те же схемы и конструкции также можно использовать на API 19, выставив прозрачную строку состояния для тонированной полупрозрачной строки состояния.

<item name="android:windowTranslucentStatus">true</item> 

Я предполагаю, что вы уже пробовали это или что-то подобное. Если это не работает, убедитесь, что ваш корневой элемент равен FrameLayout.

+1

По умолчанию android.support.design.widget.CoordinatorLayout вместо макета кадра. Это сделал трюк, спасибо –