2016-02-24 4 views
1

Основано на this Ответ Я попытался сделать решение для моего варианта использования. Вместо использования инструмента «Свертывание» я использую обычный, но с TabLayout. Однако для TabLayout мне нужно использовать ViewPager, и я понятия не имею, где его разместить, чтобы избежать проблем с FrameLayout. ViewPager был в моей принимающей фрагмент и когда его расположение заменили FrameLayout, содержание опускалась ниже панели инструментов и TabLayout по какой-то причине ...Избегайте просмотра ViewPager под панелью инструментов

Я попытался положить его ниже этой линии

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

в the app_bar_main.xml но испортил мой интерфейс.

Реальный вопрос: если мне нужны FrameLayout для моих фрагментов, и мне нужен ViewPager для моего TabLayout, как мне реализовать решение?

Вы можете видеть, что я немного переместил вид, чтобы панель инструментов скрывалась. Таким образом, это видно ViewPager занимает место даже ниже панели инструментов (если она видна)

Screenshot

Текущей попытка - appbar_content (Панель инструментов просто панель инструментов в отдельном макете):

<?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" 
tools:context=".MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appBarLayout" 

    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

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

    <android.support.design.widget.TabLayout 
     android:visibility="visible" 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/teal" 
     app:tabGravity="fill" 
     app:tabIndicatorColor="@color/purple800" 
     app:tabIndicatorHeight="4dp" 
     app:itemIconTint="@color/tabicons" 
     app:tabMode="fixed" 
     app:tabSelectedTextColor="@color/tealfifty" 
     app:tabTextAppearance="@style/TabCapsFalse" 
     app:tabTextColor="@color/iron" /> 
</android.support.design.widget.AppBarLayout> 


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



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

content_main (удаленный NestedScrollView, поскольку он все испортил, поместите весь фрагмент в виде небольшого кадра (возможно, размером 50x50) в середине экрана)

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout android:id="@+id/content_main_frame" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" /> 

Моего DrawerLayout:

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

<include 
    layout="@layout/appbar_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:fitsSystemWindows="true" 
     android:id="@+id/nvView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/tealfifty" 
     app:itemBackground="@drawable/drawer_item" 
     app:itemTextColor="@color/drawer_item" 
     app:itemIconTint="@color/drawer_item" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/navigation_view_items" /> 
</android.support.v4.widget.DrawerLayout> 

ответ

3

После многих попыток, я обнаружил, что помещение NestedScrollView внутри моего FrameLayout и назначение layout_behaviour для моего FrameLayout заставили Scroll View наследовать его, и теперь все это работает как шарм!

Это мой DrawerLayout:

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

<include 
    layout="@layout/appbar_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:fitsSystemWindows="true" 
     android:id="@+id/nvView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/tealfifty" 
     app:itemBackground="@drawable/drawer_item" 
     app:itemTextColor="@color/drawer_item" 
     app:itemIconTint="@color/drawer_item" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/navigation_view_items" /> 
</android.support.v4.widget.DrawerLayout> 

appbar_content.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" 
tools:context=".MainActivity"> 

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

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

    <android.support.design.widget.TabLayout 
     android:visibility="visible" 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/teal" 
     app:tabGravity="fill" 
     app:tabIndicatorColor="@color/purple800" 
     app:tabIndicatorHeight="4dp" 
     app:itemIconTint="@color/tabicons" 
     app:tabMode="fixed" 
     app:tabSelectedTextColor="@color/tealfifty" 
     app:tabTextAppearance="@style/TabCapsFalse" 
     app:tabTextColor="@color/iron" /> 
</android.support.design.widget.AppBarLayout> 



<FrameLayout android:id="@+id/content_main_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:showIn="@layout/appbar_content" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/scroll_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</FrameLayout> 


<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:visibility="invisible" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="16dp" 
    android:clickable="true" 
    android:src="@drawable/addico" 
    app:layout_anchor="@id/content_main_frame" 
    app:layout_anchorGravity="bottom|end" /> 

+0

У меня была такая же проблема с ViewPager. Добавление атрибута layout_behaviour в ViewPager, решило проблему. –

+0

Рад, что вы исправили ее :) – iBobb

0

Поместите вкладку расположение и вид пейджер в виде линейной схемы с вертикальной ориентацией. Таким образом, ваш линейный макет будет дочерним положением координатора. Это позволит убедиться, что ваш плейер открывается ниже tablayout.

+0

Мой TabLayout является частью AppBarLayout так, что она движется вместе с панели инструментов при он рушится. Мой ViewPager даже не в том же макете. TabLayout и панель инструментов находятся в DrawerLayout, поэтому я не думаю, что предлагаемые вами могут быть реализованы? Вы видели ответ, который я сказал, что я последовал за решением? – iBobb

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