2015-05-30 14 views
46

Sono stato cercando di implementare un CollapsingToolbar con un RecyclerView utilizzando la piccola quantità di guida qui: http://android-developers.blogspot.co.uk/2015/05/android-design-support-library.html e il progetto qui: https://github.com/chrisbanes/cheesesquare, e attualmente hanno il seguente schema:CoordinatorLayout con RecyclerView & CollapsingToolbarLayout

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<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:theme="@style/Toolbar" 
     app:contentScrim="@color/primary" 
     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" 
      app:theme="@style/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/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

<android.support.design.widget.FloatingActionButton 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    app:layout_anchor="@id/appbar" 
    app:layout_anchorGravity="bottom|right|end" 
    android:src="@drawable/ic_directions" 
    android:layout_margin="@dimen/fab_margin" 
    android:clickable="true"/> 

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

la fonte è la seguente:

setContentView(R.layout.activity_details_image); 
    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    loadImage(); 
    CollapsingToolbarLayout collapsingToolbar = 
      (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
    collapsingToolbar.setTitle(formatName(getIntent().getStringExtra("name"))); 
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    ArrayList<DetailsAdapter.Detail> details = new ArrayList<DetailsAdapter.Detail>(); 
    details.add(new DetailsAdapter.Detail("Main Facilities", "Children's Play Area, Ecotricity Electric Vehicle Charging Point, Lucky Coin, Multi Faith Room (southbound only), Showers", R.drawable.ic_moto)); 
    details.add(new DetailsAdapter.Detail("Restaurants", "Eat & Drink Co., Burger King, Costa, West Cornwall Pasty Co. (northbound only), Greggs, Costa Express, Krispy Kreme", R.drawable.ic_moto)); 
    details.add(new DetailsAdapter.Detail("Shops", "WHSmith, M&S Simply Food, Fone Bitz, Cotton Traders, Ladbrokes (southbound only)", R.drawable.ic_moto)); 
    details.add(new DetailsAdapter.Detail("Motel", "Travelodge", R.drawable.ic_moto)); 
    details.add(new DetailsAdapter.Detail("Forecourt", "BP (with: LPG), Costa Express, Air1 AdBlue", R.drawable.ic_moto)); 
    DetailsAdapter mAdapter = new DetailsAdapter(this, details); 
    recyclerView.setAdapter(mAdapter); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 

ho provato, senza la barra degli strumenti collasso e scorre bene

Tuttavia non scorre, anche quando l'elenco è più lungo delle parti visibili. Cosa ho fatto di sbagliato?

+0

Ho provato a utilizzare il layout con un semplice RecyclerView, ha funzionato bene. Il problema potrebbe essere con il numero di elementi o magari con l'implementazione dell'adattatore? – razzledazzle

+0

Funziona senza la barra degli strumenti, come ho detto. L'adattatore e gli articoli vanno bene. Potresti caricare il tuo progetto? – Kieron

+0

In realtà, per testare ho modificato il progetto Cheesesquare, l'unica cosa che ho fatto è stato sostituire NestedScrollingView nella vista dettagli con RecyclerView nel progetto, ha funzionato. – razzledazzle

risposta

63

Assicurarsi che si sta utilizzando com.android.support:recyclerview-v7:22.2.0

(con versione precedente alla 22.2.0 non ha funzionato neanche per me)

+0

Questo lo ha risolto per me. Sono senza parole. Grazie Roi! – EboMike

+0

anche se funziona ora, il mio RecyclerView non è alto come dovrebbe essere - è match_parent, ma sembra mancare esattamente tanto dal basso quanto la barra degli strumenti è alta quando espansa. È un altro segno di una vecchia biblioteca? Potrei generare un'altra domanda, semplicemente pubblicandola nel caso tu abbia una risposta veloce. Sto usando essenzialmente lo stesso layout di cui sopra. – EboMike

+3

Per ora quello che ho fatto è stato rendere RecyclerView con layout_height = "wrap_content" e layout_marginBottom = "? Attr/actionBarSize" (l'altezza della barra degli strumenti) –

6

Im probabilmente 1 anno di ritardo per rispondere a questo. Ho trovato una soluzione. Eccolo, aggiungi layout_marginBottom nella visualizzazione scroll nidificata:

<?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:id="@+id/main_coord_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.android.minhnguyencv.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="256dp" 
     android:id="@+id/appbar" 
     android:theme="@style/AppTheme.AppBarOverlay" 
     app:elevation="4dp"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapse_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_scrollFlags = "scroll|exitUntilCollapsed" 
      app:contentScrim="@color/colorPrimary" 
      android:fitsSystemWindows="true" 
      app:expandedTitleTextAppearance="@android:color/transparent"> 

      <ImageView 
       android:id="@+id/coverPhoto" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:scaleType="fitXY" 
       android:fitsSystemWindows="true" 
       android:src="@drawable/coverphoto" 
       app:layout_collapseMode="parallax" 
       android:clickable="true" /> 

      <ImageView 
       android:id="@+id/profilePhoto" 
       android:layout_width="150dp" 
       android:layout_height="150dp" 
       android:layout_gravity="center_horizontal|bottom" 
       android:scaleType="fitXY" 
       android:fitsSystemWindows="true" 
       app:layout_collapseMode="parallax" 
       android:clickable="true" /> 

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

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

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

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/main_nested_scroll_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity = "fill_vertical" 
     android:layout_marginBottom="?attr/actionBarSize" 
     app:layout_behavior = "@string/appbar_scrolling_view_behavior"> 

     <include layout="@layout/content_main" /> 

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

    <include layout="@layout/floating_button_menu"/> 

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

Questa era l'unica correzione per me in esecuzione 23.3.0 – fillobotto

+0

uguale con la libreria di supporto versione 25.3.1. – AlexKost

+0

Funziona per me. Bella soluzione Ho usato questo con ScrollView però. – InsParbo

Problemi correlati