Подтвердить что ты не робот

Android SupportLib - FrameLayout в CoordinatorLayout с AppBarLayout, потребляющим всю высоту экрана

В настоящее время у меня проблема с FrameLayout в CoordinatorLayout из библиотеки поддержки дизайна Android, тогда как я следовал инструкциям из этого post при создании вкладок.

В основном все работает так, как ожидалось, фрагменты контейнера накачиваются в FrameLayout, а их вкладки-фрагменты добавляются в вкладку ViewPager в качестве вкладок (нужно так, потому что у меня есть многочисленные фрагменты, которые следует повторно использовать макет).

Проблема, с которой я борюсь, заключается в том, что FrameLayout (а в результате также и фрагменты табуляции) потребляет всю высоту экрана, поэтому перекрывает Toolbar и TabLayout. Чтобы визуализировать проблему, я создал следующее изображение:

Визуализированная проблема

Base-Layout с CoordinatorLayout, Toolbar и TabLayout:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <include layout="@layout/toolbar" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

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

</android.support.design.widget.CoordinatorLayout>

Раздельный макет, используемый фрагментами, надутыми в container:

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

Все фрагменты завышены моим классом BaseFragment (в другом сообщении в SO-вызове inflater.inflate(getLayoutRes(), null); была проблема, вызывающая ту же проблему)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(getLayoutRes(), container, false);
}

Если заменить CoordinatorLayout на нормальный LinearLayout, то FrameLayout начинается ниже AppBarLayout, как ожидалось, но согласно документации the AppBarLayout для большинства его функций требуется быть прямым потомком CoordinatorLayout.

Я мог бы просто добавить marginTop в FrameLayout, но я хотел бы знать, есть ли подходящее решение для этого. Заранее благодарим за любые подсказки!

4b9b3361

Ответ 1

Переместите app:layout_behavior="@string/appbar_scrolling_view_behavior" в FrameLayout - этот атрибут должен находиться в прямом дочернем элементе CoordinatorLayout.