10

Sto cercando di creare un CollapsingToolbarLayout e sotto di esso un listview, quando si scorre la listview la barra degli strumenti dovrebbe comprimere, ma non funziona quando scorre la barra degli strumenti non sta collassando.CollapsingToolbarLayout non funziona (compressione) durante lo scorrimento

usato questo tutorial: http://android-developers.blogspot.in/2015_05_01_archive.html

Nota: Il FrameLayout contiene ListView

<LinearLayout 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="wrap_content" 
     android:orientation="vertical" 
     android:scrollbars="vertical"> 

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

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

       <android.support.v7.widget.Toolbar 
        android:id="@+id/toolbara" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:background="?attr/colorPrimary" 
        app:layout_collapseMode="pin" 
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 
      </android.support.design.widget.CollapsingToolbarLayout> 
     </android.support.design.widget.AppBarLayout> 

     <FrameLayout 
      android:id="@+id/frame" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

Il codice framelayout:

<RelativeLayout 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" 
    tools:context="ranjithnair02.com.supporttest.BlankFragment"> 

    <ListView 
     android:id="@+id/rcyv" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="10dp" 
     android:layout_marginRight="10dp" 
     android:src="@android:drawable/ic_search_category_default" 
     app:borderWidth="0dp" 
     app:elevation="5dp" 
     app:rippleColor="@color/wallet_highlighted_text_holo_light" /> 
</RelativeLayout> 

enter image description here

+0

provare a sostituire la radice 'LinearLayout' con' android.support.design.widget.CoordinatorLayout'. –

risposta

28

Si consiglia di utilizzare RecyclerView invece di ListView

Nota: non dimenticare di aggiornare RecyclerView nel file di Gradle.

compile 'com.android.support:recyclerview-v7:22.2.0' 
+7

Nota, puoi racchiudere qualsiasi contenitore in un 'NestedScrollView' dalla' Libreria del progetto di supporto' e funzionerà anche.Quindi puoi racchiudere il 'ListView' all'interno di' NestedSrollView' –

+4

Non dovresti mettere Listview all'interno di qualsiasi ScrollView –

+1

Avvolgere il ListView All'interno di uno ScrollView annidato Non funziona – KudzieChase

1

Il problema è il RelativeLayout. Prova a sostituire lo FrameLayout con lo ListView e poi lo FloatingButton. Tutto avvolto in un CoordinatorLayout ovviamente.

1
<FrameLayout 
     android:id="@+id/frame" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
+0

Anche tu dovresti racchiudere tutto in CoordinationLayout – user2410066

6

Ho fatto un esempio utilizzando RecyclerView. Il codice sorgente può essere trovato qui: https://github.com/jiahaoliuliu/MaterialDesignSample/tree/collapsingToolbars

Ci sono un paio di cose che dovresti prendere in considerazione e il post non dice.

  1. Usa CoordinatorLayout come il layout principale

  2. utilizzare un tema, senza ActionBar e impostare la barra degli strumenti come ActionBar invece. Puoi farlo con la creazione di un tema speciale per l'attività in questo modo:

    <!-- Indigo without actionbar when toolbar is used --> 
    <style name="IndigoWithoutActionBar" parent="Indigo"> 
        <item name="windowActionBar">false</item> 
        <item name="windowNoTitle">true</item> 
    </style> 
    

    E nel file AndroidManifest.xml, effettuare le seguenti:

    <activity 
        android:name=".CollapsingToolbarActivity" 
        android:label="@string/app_name" 
        android:theme="@style/IndigoWithoutActionBar" 
        > 
    </activity> 
    

    Una volta fatto questo, impostarlo sulla codice Java:

    // Actionbar 
    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    

Ecco un codice XML funzionale che io uso.

<?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" 
    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="@dimen/detail_backdrop_height" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     android:fitsSystemWindows="true"> 

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

      <ImageView 
       android:id="@+id/backdrop" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:scaleType="centerCrop" 
       android:fitsSystemWindows="true" 
       app:layout_collapseMode="parallax" /> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:layout_collapseMode="pin" /> 

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/simpleRecyclerView" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     /> 

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

Se questo non è abbastanza per voi, è possibile seguire il codice di Chris Banes qui: https://github.com/chrisbanes/cheesesquare

+0

Sono in grado di farlo funzionare con 'RecyclerView'. Il mio problema è che voglio usare 'FrameLayout'. – Psypher

+0

@Psypher: dovresti mettere il tuo 'FrameLayout' all'interno di' NestedScrollView' –