Фрагмент из View Pager, скрывающийся за Tab Bar
У меня проблема с панелью вкладок и ViewPager в моем проекте Android. В приложении у него есть активность, в которой размещается макет вкладки, а затем есть 2 фрагмента, который представляет каждую вкладку.
Когда активность открыта, он отправляется в API для получения некоторых данных и помещает данные в адаптер данных для отображения ресайклеров и карты в каждом из фрагментов.
Рециклирующее представление будет содержать 3 элемента, но только 2 показаны, поскольку первый скрывается под панелью инструментов и/или панель вкладок, как показано на скриншоте ниже.
Ниже представлен файл макета моей активности
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.BoardiesITSolution.CritiMonApp.AppsActivity">
<android.support.design.widget.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/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--app:layout_behaviour="@string/appbar_scrolling_view_behaviour" />-->
</android.support.design.widget.CoordinatorLayout>
Ниже представлена компоновка фрагмента
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<view
android:id="@+id/recycler_view"
class="android.support.v7.widget.RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
</LinearLayout>
Ниже приведен макет для размещения карты
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_margin="8dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:elevation="5dp">
<TextView
android:id="@+id/txtApplicationName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:maxLines="3"
android:padding="8dp"
android:textColor="#222"
android:textSize="15dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
Ниже приведен скриншот, как указано выше, в котором показана проблема. Я пикселирую часть текста, но это должно означать, что должно быть 3 элемента, но первый элемент скрывается под панелью вкладок.
![Снимок экрана, показывающий проблему]()
Спасибо за любую помощь, которую вы можете предоставить
Ответы
Ответ 1
Изменить. Как показано ниже @smeet и @hardik, добавление поведения прокрутки app:layout_behavior="@string/appbar_scrolling_view_behavior"
должно устранить проблему, сохранив поведение прокрутки. Поведение свитков работает только в том случае, если представление является прямым дочерним положением координатора.
Старый ответ
Просто оберните свой макет панели приложений и просмотрщик в вертикальном LinearLayout
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.BoardiesITSolution.CritiMonApp.AppsActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
//appbar layout
//viewpager
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
В документах CoordinatorLayout is a super-powered FrameLayout
. Таким образом, вы можете ожидать типичные "взгляды на вид сверху поверх других представлений" в режиме FrameLayout.
Ответ 2
Добавление:
Приложение: layout_behavior = "@строка/appbar_scrolling_view_behavior"
в ViewPager
проблема разрешена в моем случае.
Ответ 3
, если мы накроем макет панели приложений с помощью линейного макета, чем панель инструментов не скроется при прокрутке, так что принятый ответ может не помочь вам, если вы хотите скрыть панель инструментов при прокрутке.
Smeet сделал правильный путь, но не объяснил! вот полный пример с объяснением.
добавить app
namspace в CoordinatorLayout
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
......
>
и просто добавьте строку ниже в ViewPager
app:layout_behavior="@string/appbar_scrolling_view_behavior"
полный xml будет ниже
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>