CollapsingToolbarLayout:修复自定义布局

时间:2016-07-09 14:49:42

标签: android android-layout android-collapsingtoolbarlayout

这就是我想做的事情:我想在CollapsingToolbarLayout中显示地图,地图下方应该是包含几个控件的自定义布局。下面是RecyclerView。我希望能够滚动自定义布局以及RecyclerView,但在RecyclerView保持滚动的同时将自定义布局固定在顶部。 这是我想要实现的图像(灰色=地图;红色=自定义布局;绿色= RecyclerView): enter image description here

这是我到目前为止所拥有的。它运行良好,除了自定义布局(红色)不会停止滚动,如果它到达屏幕的顶部。

<?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:mapbox="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/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:orientation="vertical"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <com.mapbox.mapboxsdk.maps.MapView
                android:id="@+id/map_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_collapseMode="parallax"
                mapbox:zoom="12"
                mapbox:style_url="@string/style_light"
                mapbox:access_token="@string/access_token">
            </com.mapbox.mapboxsdk.maps.MapView>

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

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

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

        <android.support.v7.widget.RecyclerView
            android:id="@+id/activity_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp">

        </android.support.v7.widget.RecyclerView>

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

实现此行为的最简单方法是什么?

2 个答案:

答案 0 :(得分:0)

答案其实非常简单。我只需将自定义布局移动到AppBarLayout中。

这是布局:

<?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:mapbox="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/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <com.mapbox.mapboxsdk.maps.MapView
                android:id="@+id/map_view"
                android:layout_width="match_parent"
                android:layout_height="400dp"
                app:layout_collapseMode="parallax"
                mapbox:zoom="12"
                mapbox:style_url="@string/style_light"
                mapbox:access_token="@string/access_token">
            </com.mapbox.mapboxsdk.maps.MapView>

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

        <include layout="@layout/current_activity"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:background="?attr/colorAccent"/>
    </android.support.design.widget.AppBarLayout>

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">


        <android.support.v7.widget.RecyclerView
            android:id="@+id/activity_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp">

        </android.support.v7.widget.RecyclerView>

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

答案 1 :(得分:0)

添加应用:layout_collapseMode =&#34; pin&#34;红色视图中的此属性将固定在屏幕顶部。 这可能会解决您的问题