2016-11-09 1 views
2

У меня есть макет, который переходит между двумя сценами.Поддержание оконных вставок «fitsSystemWindows» через сценический переход

layout.xml

<FrameLayout 
    android:id="@+id/framelayout_1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    // Some background views. 

    <FrameLayout 
     android:id="@+id/scene_root" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <include layout="@layout/scene_a" /> 
    </FrameLayout> 


</FrameLayout> 

разреш/макеты/scene_a.xml

<android.support.constraint.ConstraintLayout 
    android:id="@+id/constraintlayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    // Child views removed for brevity 
</android.support.constraint.ConstraintLayout> 

макет сцены B идентичен.

В деятельности ViewCompat.setOnApplyWindowInsetsListener(frameLayout, (v, insets) -> insets); призван использовать fitsSystemWindows с FrameLayout.

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

Однако, когда я перехожу на сцену B, эта прокладка, предоставляемая fitsSystemWindows, теряется, и содержимое вскакивает. Сцена А также теряет прокладку, когда возвращается.

Любая помощь, которую очень ценят, как сохранить эту прокладку через переходы.

ответ

1

ОК, так что не имеет ничего общего с сюжетными переходами и все, что связано с android:fitsSystemWindows.

Поведение по умолчанию для любого вида, использующего android:fitsSystemWindows, - это использование вложенных оконных вставок. Сначала вставляются вставки глубины - см. Это blog.

Итак, в моем примере выше первая сцена, которая установила android:fitsSystemWindows, потребляет вставки, поэтому сцена B не получает шанс. Точно так же, когда я перехожу обратно в сцену А (они уже были использованы).

Исправление в моем примере состояло в том, чтобы удалить android:fitsSystemWindows из обеих сцен и поместить его в корень сцены.

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