1

Я пытаюсь использовать сворачивающуюся панель инструментов в сочетании с RecyclerView, большинство примеров сворачивающейся панели инструментов, которую я могу найти, обычно со статическим scrollview, а те, которые я нашел с RecyclerView, не работают , смог ли кто-нибудь сделать эту работу? Я буду включать мой XML код ниже:Панель инструментов для Android с RecyclerView

<?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/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="500dp" 
     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" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:contentScrim="?attr/colorPrimary"> 

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

      <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.design.widget.CoordinatorLayout> 
+0

, какая версия 'com.android.support: recyclerview-v7' сделать вас использовать? –

+0

Я использую com.android.support:recyclerview-v7:24.0.0 –

+0

, пожалуйста, проверьте мой ответ ниже –

ответ

0

Вы просто должны делать что-то вроде этого:

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     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" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:contentScrim="?attr/colorPrimary"> 

      <ImageView 
       android:id="@+id/image" 
       android:layout_width="match_parent" 
       android:layout_height="350dp" 
       android:scaleType="centerCrop" 
       app:layout_collapseMode="parallax" 
       app:srcCompat="?android:attr/fingerprintAuthDrawable" /> 

      <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/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

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

Добавление силы тяжести и привязки к recyclerview не исправило это для меня, могли ли вы заставить это работать? –

+0

да, я использую этот код в одном из моих проектов – JCDecary

+0

@JCDecary Вам не нужно использовать 'layout_anchor' или' layout_anchorGravity'; если вы удалите оба из вашего xml, он должен вести себя одинаково. – Bryan

0

Вы Переупорядочить вы CollapsingToolbarLayout и RecyclerView. Как вы можете прочитать из документации CoordinatorLayout - это супермощный FrameLayout. Это означает, что элемент, добавленный второй к макету, будет выше элемента, который был добавлен первым.

<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/main_content" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/tools" 
    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="500dp" 
     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" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

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

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

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

Изменение заказ не исправил проблему для меня, могли ли вы заставить это работать? –

0

Я считаю, что ваш код не работает, потому что вы установите layout_collapseMode на вашем ImageView к none. Согласно documentation, это сделает вид не сбрасываемым:

Вид будет действовать как нормальный, без коллапсинга.

Вы должны установить это значение layout_collapseMode="parallax", чтобы получить коллапсирующее поведение. Если вы хотите иметь спящий режим без параллакса эффект, тогда вы должны установить layout_collapseParallaxMultiplier на 0.0 на свой ImageView.


Вот 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.support.design.widget.AppBarLayout android:id="@+id/app_bar" 
     android:layout_width="match_parent" android:layout_height="500dp" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:layout_width="match_parent" android:layout_height="wrap_content" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <ImageView 
       android:layout_width="match_parent" android:layout_height="wrap_content" 
       android:scaleType="centerCrop" android:src="@drawable/car" 
       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/AppTheme.PopupOverlay"/> 

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

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

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

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

Проблема не в анимации изображения, к сожалению, но вместо этого recyclerview и изображение не координируют друг с другом, а одно накладывается на другое, я не смог получить основное поведение прокрутки, в котором обработка recyclerview и изображение работают в унисон друг с другом –

+0

@EdmundRojas Strange, атрибут 'app: layout_behavior =" @ string/appbar_scrolling_view_behavior "является тем, что координирует эти два. Возможно, попробуй мое предложение вместе с заменой заказа, как предложил В. Володинович? – Bryan

+0

@EdmundRojas Единственное другое предложение, которое у меня есть, возможно, завершает ваш 'RecyclerView' в другом' View', например 'NestedScrollView' (убедитесь, что внешний' View' имеет атрибут 'layout_behavior')?Я не тестировал уникальное «RecyclerView» сам, в каждом случае сворачивающейся панели инструментов «RecyclerView» находится внутри «Фрагмента». – Bryan

1

Наконец фик его thanks to this library

<?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.support.v7.widget.RecyclerView 
    android:id="@android:id/list" 
    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="@dimen/app_bar_height"> 

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

     <ImageView 
      android:id="@+id/backdrop" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:src="@drawable/cover" 
      android:visibility="visible" 
      app:layout_collapseMode="none" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:navigationIcon="@drawable/ic_menu_arrow_back" /> 
    </android.support.design.widget.CollapsingToolbarLayout> 
</android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout>