2

Ich habe es mit etwas seltsam zu ViewPager, AppBarLayout und Toolbar.ViewPager Scroll-Layout Verhalten funktioniert nicht mit Toolbar

In meinem Layout, ich habe eine Standard-Material Design-Setup erhalten, wie zum Beispiel:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="..."> 

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

     <android.support.v7.widget.Toolbar 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@color/grey_900" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:layout_scrollFlags="scroll|enterAlways" /> 

     <android.support.design.widget.TabLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabGravity="fill" 
      app:tabBackground="@color/grey_900" 
      app:tabIndicatorColor="@color/white_1000" 
      app:tabIndicatorHeight="4dp" /> 

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

    <android.support.v4.view.ViewPager 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.FloatingActionButton 
     ... 
     app:layout_behavior="com.inkstinctapp.inkstinct.FabBehavior" /> 

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

Mein ViewPager enthält vier Fragmente mit diesem Layout:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <me.zhanghai.android.materialprogressbar.MaterialProgressBar 
     android:layout_width="56dp" 
     android:layout_height="56dp" 
     android:indeterminate="true" 
     android:tint="@color/white_1000" 
     android:layout_centerInParent="true" /> 

    <android.support.v4.widget.SwipeRefreshLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

    </android.support.v4.widget.SwipeRefreshLayout> 

</RelativeLayout> 

ich das nicht bekommen kann Toolbar zum scrollen, Ich habe versucht, jede Kombination von:

app:layout_behavior="@string/appbar_scrolling_view_behavior" 
app:layout_scrollFlags="scroll|enterAlways" 

Keiner von ihnen scheint zu arbeiten, außer wenn ich die entfernen appbar_scrolling_view_behavior von meinem Viewpager, was nicht in Ordnung ist, weil der Viewpager unter das AppBarLayout geht.

Was mache ich falsch? Jede Hilfe würde wirklich geschätzt werden!

+0

Versuchen Hinzufügen 'App: layout_behavior = "@ Zeichenfolge/appbar_scrolling_view_behavior"' in 'RecyclerView' in Ihrem Fragment Layout – Rehan

+0

Welche Version von appcompat verwenden Sie? 23.2 hatte einige Bugs mit AppBarLayout + SwipeRefreshLayout + SwipeRefreshLayout – marco

+0

@Rehan nichts, die Symbolleiste ist immer noch nicht scrollbar .. danke übrigens – Matteo

Antwort

0

Versuchen Sie, Ihre Symbolleiste innerhalb CollapsingToolbarLayout wie diese

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 

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

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      /> 

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

    <android.support.design.widget.TabLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabBackground="@color/ezy_green" 
     app:tabGravity="fill" 
     app:tabIndicatorColor="@color/gray_background" 
     app:tabIndicatorHeight="4dp" 
     app:tabMode="fixed"/> 
</android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout> 

wraping Und vergessen Sie nicht, Scrollverhalten Ihre Recycler Ansicht hinzuzufügen und der Rest der Attribute zu setzen Ihren Bedürfnissen

0

Sie können versuchen, es zu passen;

Für Beispielcode;

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/mainScreen"> 

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

    <!-- 
    <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/ThemeOverlay.AppCompat.Light" /> 
    --> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="fixed" 
     style="@style/AppTabLayout" 
     app:tabGravity="fill"/> 
</android.support.design.widget.AppBarLayout> 

<!--<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/fragment_container">--> 

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

<!--</FrameLayout>--> 

1

Hier ist ein weites Layout Implementierung des Verhaltens Sie erreichen wollen.

<CoordinatorLayout> 
<AppbarLayout/> 
<Viewpager 
. 
. 
app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
<FloatingActionButton/> 
</CoordinatorLayout> 

add Verhalten auf die darunter liegenden ViewPager und es funktioniert. Nehmen wir an, Ihre AppbarLayout ist eine benutzerdefinierte Implementierung mit einer ToolBar eine TabLayout und eine benutzerdefinierte Ansicht sagen LinearLayout Dies ist, wie dieser Code das scroll Attribut implementieren soll.

<AppBarLayout> 
    <CollapsingToolbarLayout 
     app:layout_scrollFlags="scroll|snap" 
     /> 

    <Toolbar 
     app:layout_scrollFlags="scroll|snap" 
     /> 

    <LinearLayout 
     android:id="+id/title_container" 
     app:layout_scrollFlags="scroll|enterAlways" 
     /> 

    <TabLayout /> <!-- no flags --> 
</AppBarLayout> 

Weiter können Sie mit den Flags und ihren Werten experimentieren. Aber denken Sie daran, AppbarLayout ist eine vertikale LinearLayout mit Superkräften. Legen Sie also Ihre Ansichten entsprechend fest. Try this blogpost for details

+1

Das scheint echt, leider kann ich momentan nicht testen da sich das appdesign seitdem geändert hat, werde ich später mal sicher versuchen. Danke auch für den Link zum Blog, der sehr nützlich sein wird – Matteo

+1

@Matteo Ich habe seit der ersten Veröffentlichung ständig an diesen Komponenten experimentiert. Mach dir keine Sorgen, es wird sicherlich funktionieren. Jetzt hängt das QuickReturn-Verhalten auch von der Komplexität der Layouts im Viewpager ab. Willkommen aber! – sud007

Verwandte Themen