4

I'm building a toolbar with a map fragment as part of it. The toolbar is fixed in position and is opaque.

Whenever the view's content is scrolled upwards, the map fragment moves with it but it is visible above the toolbar (and therefore between the status bar itself and the statusbar's orange background).

This is the resulting issue: MapFragment overlaps statusbar "background"

If I scroll a bit more, the scrim fades in normally, but too late.

Is there a way of not drawing the content when it goes above the toolbar? Or a way of making the status bar background to be drawn in front of the AppBarLayout content?

I've tried drawing a view in front of the AppBarLayout (right below the statusbar), but once the MapFragment is scrolled all the way up, it is then brought to front of that view, making the MapFragment visible during a small instant.

<?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_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/promotion_details_image_height"
        android:clickable="true"
        android:fitsSystemWindows="true"
        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"
        android:background="@color/orange"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="?attr/actionBarSize">

            <fragment
                android:id="@+id/map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_collapseMode="none"
                tools:context=".restaurants.stores.StoresFragment" />

            <ImageView
                android:id="@+id/minimizeBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/stores_details_minimize_margin"
                android:clickable="true"
                android:contentDescription="@null"
                android:paddingTop="@dimen/status_bar_height"
                android:src="@drawable/selector_map_minimize_btn"
                android:visibility="gone" />

            <include
                android:id="@+id/cardDetailsLayout"
                layout="@layout/store_card_small_detail"
                android:layout_width="match_parent"
                android:layout_height="@dimen/stores_details_card_height"
                android:layout_alignParentBottom="true"
                android:layout_margin="10dp"
                android:visibility="gone" />
        </RelativeLayout>

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

            <com.app.views.FontTextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:singleLine="true"
                android:text="@string/store_toolbar_text"
                android:textColor="@color/white"
                android:textSize="@dimen/toolbar_text_size"
                app:font="@string/fontFlamaMedium" />
        </android.support.v7.widget.Toolbar>
    </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>

Edit: In the layout xml the android:layout_behavior attribute associated with my RecyclerView, but the toolbar's content has the correct behaviour, the problem is that it is visible under the statusbar, which I don't want it to.

jsc
  • 168
  • 1
  • 8
  • Is your activity theme setting `android:statusBarColor` to transparent? – cziemba Dec 29 '15 at 16:21
  • Possible duplicate of [Content behind CoordinatorLayout AppBarLayout](http://stackoverflow.com/questions/32855889/content-behind-coordinatorlayout-appbarlayout) – Midhun MP Dec 29 '15 at 16:26
  • @cziemba: Yes, I've tried both transparent and non-transparent, but the result is still the same – jsc Dec 29 '15 at 16:33
  • Have you tried adding `android:fitsSystemWindows="true"` to the map fragment in the xml? – cziemba Dec 29 '15 at 16:43
  • @MidhunMP In the xml code I shared I do have the android:layout_behavior attribute associated with my RecyclerView, like it is proposed as the solution to that question, but the issue differs. The toolbar's content has the correct behaviour, it's just it is visible below the statusbar, when I don't want it to. – jsc Dec 29 '15 at 16:43
  • @cziemba it results in the same behaviour. – jsc Dec 29 '15 at 17:00

2 Answers2

1

You should remove your argument:android:fitsSystemWindows="true"

More about this on this blogPost from a google developper : https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec

Ferdi
  • 768
  • 3
  • 14
0

Remove this attribute from Toolbar

android:background="?attr/colorPrimary"

And add this attribute to CollapsingToolbar

 app:contentScrim="?attr/colorPrimary"

The contentScrim will control the color of the Toolbar and ensure the color only appears when the background image has faded out

enyciaa
  • 1,982
  • 1
  • 14
  • 24