Intereting Posts
Импортируйте новую библиотеку поддержки Android Design Что означает эта линия? LOCAL_EXPORT_C_INCLUDES Как сфокусироваться на местоположении на картах Google, учитывая, что вид сверху? Android studio v1 – панель действий не отображается Какова цель ClassName.это вне значения? Android – Как применять diffenernt Image Effects для растровых изображений, таких как сепия, черно-белый, размытие и т. Д. Как исключить конкретные ресурсы из-за зависимостей AAR? Android (ActionBarSherlock) Есть ли способ сохранить ту же самую высоту ActionBar как в портретной, так и в альбомной ориентации? Может ли NoticationManager.notify () вызываться из рабочего потока? Использование FusedLocationApi с Xamarin 3 Приложение Android для вызова номера при нажатии кнопки Предупреждение JavaScript не работает в Android WebView Синхронизация с календарем Android-телефона в Календаре Google в Интернете без использования API данных календаря Google. Это возможно? Дифференциальные правила использования getBaseContext для Android, getApplicationContext или использования «этого» Исключение Null Pointer в использовании поставщика акций для поддержки библиотеки поддержки

Прозрачные системные бары и область содержимого в KitKat

Я пытаюсь использовать новые прозрачные системные панели KitKat, чтобы получить полноэкранное изображение на фоне моего приложения.

У меня проблемы с настройкой правильных настроек, чтобы получить поведение, которое я хочу. Сейчас у меня есть ViewPager с тремя Fragment каждый из которых состоит из RelativeLayout содержащего ImageView (для фонового изображения) и TextView для контента.

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

Если я просто использую android:Theme.Holo.Light.NoActionBar.TranslucentDecor как моя тема, он выглядит нормально в портрете, но панель навигации перекрывает контент в ландшафте (см. Скриншоты ниже).

Первая попытка - портрет. Выглядит неплохо.Первая попытка - пейзаж. Панель навигации перекрывает содержимое

Следуя рекомендациям в документах , я добавил android:fitsSystemWindows = true для моей темы, но это создает некоторые странные артефакты (см. Ниже) Вторая попытка - портрет. Артефакты !!Вторая попытка - пейзаж. Артефакты !!

Как я могу заставить его вести себя, как во втором примере, но хорошо выглядеть, без визуальных артефактов?

Solutions Collecting From Web of "Прозрачные системные бары и область содержимого в KitKat"

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

Кажется, что есть ошибка Android, когда ViewPager (особенно ImageSwitcher) помещается в макет с атрибутом android:fitsSystemWindows="true" . По какой-то причине системные окна, похоже, получают артефакты, нарисованные поверх них. : /

Во всяком случае, я нашел исправление. Для моей деятельности у меня был формат XML следующим образом:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" <!-- NOT HERE! android:fitsSystemWindows="true" --> android:layout_width="match_parent" android:layout_height="match_parent"> <ImageSwitcher android:id="@+id/background_image_switcher" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="0dp" android:layout_margin="0dp" android:background="@color/background_dark_navy" android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" > <ImageView style="@style/BlurredBackgroundImage" /> <ImageView style="@style/BlurredBackgroundImage" /> </ImageSwitcher> <FrameLayout android:fitsSystemWindows="true" <!-- Here!!! --> android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Fitted content here --> </FrameLayout> 

Хитрость заключалась в том, чтобы не содержать ImageSwitcher в макете с android:fitsSystemWindows="true" , но вместо этого переместить атрибут android:fitsSystemWindows="true" во внутренний FrameLayout, содержащий фактический контент, который мне нужно поместить (заголовок Текст в вашем случае). К сожалению, это позволяет видеть, что изображение ImageSwitcher / ViewPager слегка обрезается системными окнами, но если изображение используется как фоновое изображение, в любом случае это не имеет большого значения и является гораздо лучшим компромиссом, чем артефакты или поддерживающие все Различных размеров / стилей, которые могут иметь или не иметь отключенной навигации (например, выбранный в данный момент ответ).

Я надеюсь, что это помогает кому-то!

Мое решение состояло в том, чтобы отключить прозрачную навигацию в ландшафтном режиме. Вы все равно получаете полупрозрачную строку состояния, но она устраняет проблему, когда панель навигации непрозрачна и перекрывается в ландшафте.

Res / values-v19 / styles.xml (эти значения указаны в моей теме)

 <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">@bool/translucentNavBar</item> 

Res / values-v19 / bools.xml (включить полупрозрачный навигатор )

 <bool name="translucentNavBar">true</bool> 

Res / values-land-v19 / bools.xml (отключить полупрозрачную навигацию в ландшафте)

 <bool name="translucentNavBar">false</bool> 

Res / values-sw600dp-land-v19 / bools.xml (включить прозрачный nav для планшетов в ландшафте)

 <bool name="translucentNavBar">true</bool> 

У меня возникли аналогичные проблемы, но я не использовал ViewPager, поэтому это может не сработать. Я решил, выполнив некоторую вложенность, как описал Гейб: только внутренняя ViewGroup – fitSystemWindows = "true", поэтому внешняя ViewGroup, которая отображает фон, разрешается расширять под полупрозрачными барами. Затем я также вызываю requestFitSystemWindows () при изменении ориентации. Опять же, ваш ViewPager может усложнять ситуацию, и мое решение не будет работать, но я надеюсь, что это поможет.

Поместите еще одну ViewGroup внутри той, у которой есть изображение, и fitsSystemWindows – true

Вы должны обернуть это внутри Linear Layout и установить fitsSystemWindows в true.