Ответ 1
Переместите app:layout_behavior="@string/appbar_scrolling_view_behavior"
в FrameLayout
- этот атрибут должен находиться в прямом дочернем элементе CoordinatorLayout
.
В настоящее время у меня проблема с 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
, но я хотел бы знать, есть ли подходящее решение для этого. Заранее благодарим за любые подсказки!
Переместите app:layout_behavior="@string/appbar_scrolling_view_behavior"
в FrameLayout
- этот атрибут должен находиться в прямом дочернем элементе CoordinatorLayout
.