4

Моя деятельность требует макет в полноэкранном режиме:fitsSystemWindows на API16 устройство не работает

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

и в макете XML Этот параметр задает fitsSystemWindows свойство обивка высота STATUSBAR:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

<!-- The main content view --> 

     <android.support.design.widget.CoordinatorLayout 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/main_content" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true"> 

      <android.support.design.widget.AppBarLayout 
       android:id="@+id/appbar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:fitsSystemWindows="true"> 

       <android.support.design.widget.CollapsingToolbarLayout 
        android:id="@+id/collapsing_toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" 
        app:contentScrim="@color/actionbar_title_color" 
        android:fitsSystemWindows="true"> 

Составлено с appcompat-v7:23.2.1 , он хорошо работает на устройстве API21, но на устройстве API16 прокладка не применяется. Любые намеки?

UPDATE

Bounty на: почему на API16 устройстве прокладка не применяется?

ответ

-1

Из официального документа Android development pattern

На KitKat и ниже, пользовательский View может переопределить fitSystemWindows() и предоставить любую функциональность, что вы хотели - просто возвращения истинной, если вы потребляли врезку или ложной, если вы d like to дать другой шанс.

Однако на леденце и выше устройства, мы предлагаем несколько нового API, сделать настройки такого поведения гораздо проще и в соответствии с другими видами поведения для Views. Вы вместо того, чтобы переопределить onApplyWindowInsets(), что позволяет View потреблять как много или как мало вставок, как вам нужно, и быть в состоянии назвать dispatchApplyWindowInsets() на представлениях ребенка по мере необходимости.

вам даже не нужно подклассы свои взгляды, если только нужно пользовательское поведение на леденец и выше, вы можете использовать ViewCompat.setOnApplyWindowInsetsListener(), которые будут даваться предпочтение перед View в onApplyWindowInsets(). ViewCompat также предоставляет вспомогательные методы для вызова onApplyWindowInsets() и dispatchApplyWindowInsets() без проверки версий.

Теперь, Вы должны проверить с условием того, что уровень API используется и в соответствии с этим применяются условия как

if(API < Kitkat){ 
    fitSystemWindows() 
}else if(API > Lollipop){ 
    onApplyWindowInsets() 
} 

this answer Пожалуйста, проверьте для более подробной информации.

Кроме чтения http://developer.android.com/reference/android/view/View.html#fitSystemWindows%28android.graphics.Rect%29

+0

, таким образом, на API16 я должен переопределить fitSystemWindows()? Я не понимаю, почему, поскольку реализация по умолчанию должна работать, чтобы добавить нужное дополнение. – GPack

+0

, если это не работает, вам нужно применить condion, если api это (KitKat или ниже), код для этого кода для уровня api Lollipop –

+0

спасибо, я знаю все эти сообщения, но проблема здесь в том, как работать на API 16 «android: fitsSystemWindows =« true », как говорит docs. – GPack

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