2015-10-14 19 views
29

Io uso biblioteca di progettazione di supporto per mostrare/nascondere la barra degli strumenti durante lo scorrimento di un recyclerView all'interno di un frammento, come menzione qui https://github.com/codepath/android_guides/wiki/Handling-Scrolls-with-CoordinatorLayoutCome abilitare/barra degli strumenti di disabilitare lo scorrimento di programmazione quando si utilizza il design libreria di supporto

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    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:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <android.support.design.widget.CoordinatorLayout 
     android:id="@+id/coordinatorLayout" 
     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" 
      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:popupTheme="@style/AppTheme.PopupOverlay" 
       app:layout_scrollFlags="scroll|enterAlways"/> 

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


     <FrameLayout 
      android:id="@+id/flContent" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      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_dialog_email" /> 

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


    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" /> 

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

Funziona griglia, ora Voglio abilitare/disabilitare la barra degli strumenti di scorrimento a livello di codice perché io uso frammenti e ho bisogno di interrompere questa funzione per alcuni frammenti.

risposta

58

Il Toolbar, essendo un figlio di AppBarLayout, ottiene il suo LayoutParams dal AppBarLayout. Questi parametri di layout hanno i flag di scorrimento impostati nell'XML.

Quindi, si ottiene il AppBarLayout.LayoutParams dal Toolbar, e chiamare setScrollFlags() di cambiare le bandiere al valore desiderato.

Toolbar toolbar = findViewById(R.id.toolbar); // or however you need to do it for your code 
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); 
    params.setScrollFlags(0); // clear all scroll flags 
+3

E per aggiungere lo scorrimento posteriore in fase di esecuzione, utilizzare lo stesso metodo con le costanti [da qui] (http://developer.android.com/reference/android/support/design/widget/AppBarLayout.LayoutParams.html#SCROLL_FLAG_ENTER_ALWAYS) – Mauker

+0

Voglio lo stesso comportamento. Ha funzionato, ma il problema che sto avendo è che, quando imposto i flag su 0, l'altezza di nestedScrollView è ridotta e crea un enorme spazio vuoto nella parte inferiore del contenuto. Per favore aiutatemi se qualcuno lo sa. –

+0

@VineetAshtekar Puoi provare a rimuovere appbar_scrolling_view_behavior da 'NestedScrollView' allo stesso tempo. Poiché la barra degli strumenti non può più scorrere, non c'è motivo di disporre il 'NestedScrollView' come se fosse possibile. Non so esattamente come farlo a livello di programmazione; Ci sto guardando. –

8

Rimuovere app:layout_scrollFlags="scroll|enterAlways" ovunque si desideri disabilitare lo scorrimento della barra delle applicazioni.

+3

vorrei farlo a livello di codice –

+0

è possibile impostarlo come questo se si desidera disabile in xml: app: layout_scrollFlags = "enterAlwaysCollapsed" – stevyhacker