10

Ho incontrato un sacco di problemi relativi al mio problema, ma nessuno che ho trovato voleva il comportamento che sto cercando.AppBarLayout + TabLayout + CollapsingToolbarLayout + SwipeToRefresh

Voglio un cercapersone di visualizzazione con schede e barra delle applicazioni, quando i frammenti contenuti sono scorrevoli e sono scorrevoli (verso il basso), voglio che la barra app scenda ma lasci le schede, quando scorri verso l'alto, per riapparire . alcuni di questi frammenti contengono un layout SwipeToRefresh (a volte causa problemi). Ho provato molte configurazioni che lasciano sempre qualcosa di sbagliato.

per ora non ho l'effetto collasso (è sempre nascosta)

<?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:fitsSystemWindows="true" 
tools:context=".MainPagerActivity"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <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" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginEnd="64dp" 
      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|enterAlways"> 


      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       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:tabGravity="fill" 
       app:tabIndicatorHeight="6dp" 
       app:tabMode="fixed" /> 

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


    <android.support.v4.view.ViewPager 
     android:id="@+id/main_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/app_bar_layout" 
     tools:context=".MainPagerActivity" 

     /> 

</RelativeLayout> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="@dimen/fab_margin" 
    android:src="@android:drawable/ic_menu_edit" /> 

e uno dei miei frammento (lo scorrimento uno):

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:wheel="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.m360learning.app.fragment.MainPagerNewsFeed"> 


    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipeRefreshLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <com.pnikosis.materialishprogress.ProgressWheel 
       android:id="@+id/progress_wheel" 
       android:layout_width="80dp" 
       android:layout_height="80dp" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       wheel:matProg_barColor="#5588FF" 
       wheel:matProg_progressIndeterminate="true" /> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:scrollbars="vertical" /> 

     </RelativeLayout> 

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

</FrameLayout> 

I don so esattamente cosa ho fatto ma dal momento in cui ho iniziato a scrivere questa domanda il refreshLayout impedisce alla mia lista di salire (si aggiorna invece) ..

Grazie

------ Correzione!

grazie a Sir Ellie Zou, ora funziona con questo 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:fitsSystemWindows="true" 
    tools:context=".MainPagerActivity"> 


    <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.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       app:layout_collapseMode="pin" 
       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:tabGravity="fill" 
       app:tabIndicatorHeight="6dp" 
       app:tabMode="fixed" /> 

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


    <android.support.v4.view.ViewPager 
     android:id="@+id/main_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".MainPagerActivity" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 

     /> 


    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_menu_edit" /> 


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

e il layout frammento:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:wheel="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.m360learning.app.fragment.MainPagerNewsFeed"> 


    <com.pnikosis.materialishprogress.ProgressWheel 
     android:id="@+id/progress_wheel" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_gravity="center" 
     wheel:matProg_barColor="#5588FF" 
     wheel:matProg_progressIndeterminate="true" /> 

    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipeRefreshLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 


     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical" /> 


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


</FrameLayout> 

risposta

11

Se non si vuole effetto di parallasse, non è necessario usare CollapsingToolbarLayout.

cosa più importante di configurazione:

In Toolbar, impostare app:layout_scrollFlags="scroll|enterAlways".

In ViewPager, impostare app:layout_behavior="@string/appbar_scrolling_view_behavior".

e il layout dovrebbe essere simile a questo:

<android.support.design.widget.CoordinatorLayout> 

    <android.support.design.widget.AppBarLayout> 

     <android.support.v7.widget.Toolbar/> 

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

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

    <android.support.v4.view.ViewPager/> 

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

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

Spostare ProgressWheel dal vostro SwipeRefreshLayout per risolvere il problema che SwipeRefreshLayout non può aggiornare.

+0

Ottimo! Aggiorna il mio post, grazie mille! –

+0

Oups mi dispiace, non l'ho notato, ma lo swipeToRefresh è stallo rotto, qualche idea? –

+0

prova a spostare 'ProgressWheel' da' SwipeRefreshLayout' –