2015-09-14 10 views
13

Sto usando il design di supporto Android 'com.android.support:design:22.2.1' il mio problema è che quando lo scorrimento non ha contenuto in esso, la barra degli strumenti comprendente consente comunque l'azione di compressione. Devo rimuovere il collasso della vista se lo scorrimento non contiene alcun contenuto.Come disabilitare la compressione di CollapsingToolbar quando lo scorrimento non è soddisfatto?

mio XML:

<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/appbar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:fitsSystemWindows="true" 
       android:background="@android:color/white" 
       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|exitUntilCollapsed"> 

        <fragment 
         android:id="@+id/pawfile_header" 
         android:name="com.lightbulb.pawesome.fragments.PawfileHeaderFragment" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="10dp" 
         android:layout_marginTop="10dp" 
         android:fitsSystemWindows="true" 
         app:layout_collapseMode="parallax" /> 

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

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

      <fragment 
       android:id="@+id/pawfile_timeline" 
       android:name="com.lightbulb.pawesome.user_timeline.PawesomeUserTimelineFragment" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

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

UDPATE DOMANDA:

Ho chiuso con disattivazione e attivazione il crollo della vista. Ho usato questa riga di codice per disattivare il collassamento:

AppBarLayout.LayoutParams appbarParams = (AppBarLayout.LayoutParams)  collapsingToolbar.getLayoutParams(); 
appbarParams.setScrollFlags(0); 
collapsingToolbar.setLayoutParams(p); 

Il problema è che l'appbar è la forza di avere l'elevazione dei scrollflags è impostato su 0. Ho provato ad utilizzare appbar.setElevation (0) ma non ha alcun effetto. come posso rimuovere l'elevazione dalla mia appbar?

+0

app: layout_scrollFlags = "none" Invierà questo lavoro? – rKrishna

+0

come posso farlo programmaticamente –

risposta

19

ottenere il riferimento di appbarlayout e impostare setScrollFlags.

AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); 
p.setScrollFlags(0); 
toolbar.setLayoutParams(p); 
+3

questo è utile! ma come posso ripristinare l'aggiornamento –

+1

comprimendo lo stesso riferimento https://developer.android.com/reference/android/support/design/widget/AppBarLayout.LayoutParams.html#setScrollFlags(int) – rKrishna

+0

grazie mille! –

-1

By "di scorrimento non ha alcun contenuto in essa", lo prendo che vuoi dire "non c'è frammento". Per questo, penso che si dovrà cambiare prima la <fragment> ad un <FrameLayout>, quindi aggiungere il frammento programatically utilizzando getFragmentManager().beginTransaction(), e quindi verificare se il frammento è presente (cioè non null) in questo modo:

if (getFragmentManager().findFragmentById(R.id.fragment_name) != null) { 
      // here try RKNP's code to disable the appBar from collapsing 
    } 
1

Per fermare crollo collapsingtoolbar Non dia

app:layout_scrollFlags="scroll|exitUntilCollapsed" nel file..You XML può rimuovere quel codice

+0

Consiglio cattivo. Quindi non collasserà anche se c'è del contenuto da scorrere. – Bringoff

3

Prova appbarParams.setScrollFlags(-1); e appBarLayout.setExpanded(true, true) per rimuovere l'elevazione.

E se avete recyclerView nel frammento, provare recyclerView.setNestedScrollingEnabled(false);

Need to disable expand on CollapsingToolbarLayout for certain fragments

+0

'setScrollFlags' contiene la barra degli strumenti e lo stato espanso. 'setNestedScrollingEnabled' consente di mantenere la posizione. questa è la soluzione più pulita per me. – Samuel