10

Я пытаюсь создать CollapsingToolbarLayout и под ним listview, когда прокрутка списка прокручивается, панель инструментов должна рушиться, но ее не работает при прокрутке панели инструментов, не рушится.CollapsingToolbarLayout не работает (сворачивается) при прокрутке

Используется этот учебник: http://android-developers.blogspot.in/2015_05_01_archive.html

Примечание: FrameLayout содержит 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> 

Код 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

Попробуйте заменить корень '' LinearLayout' с android.support.design.widget.CoordinatorLayout'. –

ответ

28

Вы должны использовать RecyclerView вместо ListView

Примечание: не забудьте обновить RecyclerView в Gradle файле.

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

Обратите внимание: вы можете обернуть любой контейнер из 'NestedScrollView' из' Support Design Library', и он тоже будет работать.Таким образом, вы можете обернуть «ListView» в «NestedSrollView» –

+4

. Вы не должны помещать Listview внутри любого ScrollView. –

+1

. Обтекание ListView. Внутри вложенной работы ScrollViewWon. – KudzieChase

1

Проблема заключается в RelativeLayout. Попробуйте заменить FrameLayout на ListView, а затем на FloatingButton. Конечно, все обернуто в CoordinatorLayout.

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

Также вы должны обернуть все в CoordinationLayout – user2410066

6

Я сделал пример, используя вместо этого RecyclerView. Исходный код можно найти здесь: https://github.com/jiahaoliuliu/MaterialDesignSample/tree/collapsingToolbars

Есть несколько вещей, которые вы должны учитывать, и сообщение не говорит.

  1. Использование CoordinatorLayout в качестве основного макета

  2. Используйте темы без ActionBar и установите панель инструментов как ActionBar вместо этого. Вы можете сделать это путем создания специальной темы для деятельности, как это:

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

    И в файле AndroidManifest.xml, сделайте последующие:

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

    Как только это сделано, установите его на Java-код:

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

Вот функциональный код XML, который я использую.

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

Если этого не достаточно для вас, вы можете следовать код Криса Бэйнс здесь: https://github.com/chrisbanes/cheesesquare

+0

Я могу заставить его работать с 'RecyclerView'. Моя проблема в том, что я хочу использовать «FrameLayout». – Psypher

+0

@Psypher: вы должны поместить свой 'FrameLayout' внутри' NestedScrollView' –