CollapsingToolbarLayout not working(collapsing)when scrolled
C

6

10

I am trying to create a CollapsingToolbarLayout and below it a listview, when the listview is scrolled the Toolbar should collapse, but its not working when scrolled the Toolbar is not collapsing.

Used this tutorial: http://android-developers.blogspot.in/2015_05_01_archive.html

Note: The FrameLayout contains the 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>

The framelayout code:

<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

Clarkclarke answered 31/5, 2015 at 13:43 Comment(1)
Try replacing the root LinearLayout with android.support.design.widget.CoordinatorLayout.Bellows
C
28

You should use RecyclerView instead of ListView

Note: don't forget to update RecyclerView in Gradle file.

  compile 'com.android.support:recyclerview-v7:22.2.0'
Contravene answered 1/6, 2015 at 12:29 Comment(4)
Note, you can wrap any container within a NestedScrollView from the Support Design Library and it will work too. So you could wrap the ListView within the NestedSrollViewForbearance
You should not put Listview inside any ScrollViewContravene
Wrapping the ListView Inside a nested ScrollViewWon't workLianneliao
If you use ` myRecycleForPrescription.setNestedScrollingEnabled(false);` For Recycle View Then app behavior will not workJeff
A
7

For my case : I dint give height to my Toolbar .

It was wrap_content. If thats the case then try to fix the height of the Toolbar using :-

android:layout_height="?attr/actionBarSize"
Armlet answered 2/7, 2019 at 10:35 Comment(2)
Thank you, this worked for me! As a matter of fact, if no specific height is set on the Toolbar, CollapsingToolbarLayout has no clue on the collapsed heightPeplos
This is what helped me for my combination with fragments! Even though it's contrary to what's in the Material3 docsObserver
C
6

I did an example by using RecyclerView instead. The source code could be found here: https://github.com/jiahaoliuliu/MaterialDesignSample/tree/collapsingToolbars

There are a couple of things that you should take into account and the post does not says.

  1. Use CoordinatorLayout as the main layout

  2. Use a theme without ActionBar and set the toolbar as actionBar instead. You can do it by creating a special theme for the activity like this:

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

    And in the AndroidManifest.xml file, do the follow:

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

    Once this is done, set it on the Java code:

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

Here is a functional xml code that I use.

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

If this is not enough for you, you can follow the code of Chris Banes here: https://github.com/chrisbanes/cheesesquare

Chicoine answered 6/6, 2015 at 18:6 Comment(2)
I am able to get it work with RecyclerView. My problem is I want to use FrameLayout.Clarkclarke
@Psypher: You should put your FrameLayout inside a NestedScrollViewLiteralminded
Z
3

You need to add two things to the list view and it will work

android:nestedScrollingEnabled="true"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

My working XML code is

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/black"
    tools:context="com.example.pr20020897.samplapp.DisplayAllDataActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="200dp">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
            app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
            app:expandedTitleMarginStart="72dp"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/toolbar_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_collapseMode="parallax"
                android:scaleType="centerCrop"
                android:src="@drawable/db"
                android:contentDescription="image" />


            <android.support.v7.widget.Toolbar
                android:id="@+id/app_bar"
                android:layout_width="match_parent"
                android:layout_height="?actionBarSize"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:navigationIcon="@drawable/ic_arrow_back"
                app:contentInsetStart="72dp"
                app:layout_collapseMode="pin" />


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

    <ListView
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:id="@+id/listView"
        android:nestedScrollingEnabled="true"
        android:scrollbars="none"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="#FF0000"
        android:background="@color/black"
        android:dividerHeight="1dp">
    </ListView>
</android.support.design.widget.CoordinatorLayout>

Hopefully help someone.

Zaneta answered 10/9, 2018 at 10:8 Comment(0)
M
1

The problem is the RelativeLayout. Try replacing the FrameLayout with the ListView and then the FloatingButton. All wrapped in a CoordinatorLayout of course.

Mattah answered 31/5, 2015 at 18:22 Comment(0)
H
1
<FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
Homeopathic answered 1/6, 2015 at 6:40 Comment(1)
Also you should wrap all in CoordinationLayoutHomeopathic

© 2022 - 2024 — McMap. All rights reserved.