7

Devo creare una GUI con uno ListView e uno ActionBar che si nasconderà quando si scorre verso il basso e quando si scorre lo si deve riapparire.Come nascondere ActionBar mentre si scorre ListView in Android?

le seguenti guide non mi ha aiutato:

ho bisogno di qualcosa di simile:

enter image description here

+1

possibile duplicato [Nascondere l'ActionBar su RecyclerView/ListView onscroll] (http://stackoverflow.com/questions/13559275/hiding-the-actionbar-on-recyclerview-listview-onscroll) –

+0

@KubaSpatny Sto cercando di implementare ma il tuo codice non funziona per me. Non è un duplicato. Il post precedente non funziona – user4789408

+0

@KubaSpatny Ciò che hai collegato è sbagliato, se estendo AppCompatActivity non mi consente di Sovraccaricare i metodi suScrollStateChanged e onScroll. Se estendo Attività non posso utilizzare "getSupportActionBar" – user4789408

risposta

14

Se si desidera ottenere un elenco con questo comportamento, è necessario:

  • aggiungere la libreria di supporto di progettazione con compile 'com.android.support:design:22.2.0'
  • Utilizzare un CoordinatorLayout con una barra degli strumenti in cui è necessario definire app:layout_scrollFlags="scroll|enterAlways"
  • Utilizzare un RecyclerView invece di un ListView. Come descritto, hereListView e GridView hanno il comportamento previsto con CoordinatorLayout solo con API> 21. In questo caso è necessario utilizzare setNestedScrollingEnabled(true);

I official blog post mostra questo caso:

<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"> 

    <! -- Your Scrollable View --> 
    <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
      <android.support.v7.widget.Toolbar 
        ... 
        app:layout_scrollFlags="scroll|enterAlways"> 


    </android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout> 
+0

Posso modificare la velocità di compressione? – user4789408

+0

Penso che l'unico modo sia usare un comportamento personalizzato –

+0

C'è un altro problema. Quando la barra degli strumenti è nascosta e ho lasciato l'app, apri un'altra app, apri di nuovo l'app, la barra degli strumenti è diventata senza tutto, solo un rettangolo con un colore. – user4789408

6

mi consiglia di utilizzare il nuovo supporto libreria di design di Google.

includere nel vostro dependecies:

compile 'com.android.support:design:22.2.0' 

e quindi usare il AppBarLayout insieme NestedScrollView.

Per il numero definire app:layout_scrollFlags="scroll|enterAlways", che dice che scomparirà mentre si scorre e tornare immediatamente se si scorre verso l'alto (ovvero non è necessario scorrere fino in fondo).

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    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:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways" /> 

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

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="fill_vertical" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

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

+0

@ maveň In realtà non penso che questa domanda sia così brutta. Potrebbe essere un duplicato, ma, considerando la nuova libreria, ho pensato di dare una risposta più semplice. –

+0

Non funziona, posso solo spostare la barra delle azioni e la listview è bloccata – user4789408

+0

@ user4789408 potrebbe esserci un problema nell'uso di 'ListView' con API inferiore a 21. Invece usare' RecyclerView'. –

1

si dovrebbe usare CoordinatorLayout per questo compito. Fa parte della libreria di progettazione del supporto. Here, nel CoordinatorLayout e la sezione app bar, è possibile trovare un esempio

0

Usa [CoordinatorLayout]: https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html, che permettono di co-oridanation tra viste bambino. è come, agisci (AppBarLayout-> scrolling) su qualche vista quando c'è un comportamento osservato (ListView-> scroll) in un'altra vista.

  1. Fai Listview nestedScrollingEnabled, lavora per> API 21

    android:nestedScrollingEnabled="true" 
    
  2. trigger comportamento layout per appbar scorrimento.

    android:nestedScrollingEnabled="true" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    
  3. Qualsiasi disposizione (ToolBar/TabLayout/qualsiasi), che deve mostrare-nascondere/rotolo, posizionarlo all'interno AppBarLayout, e attivato bandiera scorrimento.

    app:layout_scrollFlags="scroll|enterAlways"