android – 如何创建与CoordinatorLayout的内容重叠的AppBarLayout

在某些活动中使用带有AppBarLayout的CoordinatorLayout时,我需要将内容放在AppBarLayout下,即工具栏使用一些透明颜色并覆盖内容.默认情况下,CoordinatorLayout AppBarLayout安排事情,以便工具栏和滚动内容彼此相邻,没有任何重叠.

Android开发人员指南有关于此here的文档,它看起来像这样(但这些标志似乎不适用于Toolbar和appcompat – 我试过):

Overlaying ActionBar

所以我需要看起来像上面图像的东西,但是所有滚动的好东西都由CoordinatorLayout AppBarLayout提供.并且不需要使用CollapsingToolbarLayout – 只需要这么简单.

有关如何实现这一目标的任何提示?
这是我的活动布局.

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/top_content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.design.widget.AppBarLayout
        android:background="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <include layout="@layout/main_toolbar"/>
    </android.support.design.widget.AppBarLayout>
    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        >
        <!-- to be filled by content fragment -->
    </FrameLayout>
    <android.support.design.widget.FloatingActionButton
        style="@style/FabStyle"
        android:id="@+id/fab_button"
        android:src="@drawable/bt_filters"
        />
</android.support.design.widget.CoordinatorLayout>
最佳答案
我试过这个解决方案,它有效.

透明度 :
为AppBarLayout添加了背景,并在AppBarLayout之前在布局中放置了滚动视图

<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00000000" >

内容定位:通过新的AppbBarTransparentScrollingViewBehavior重写onDependentViewChanged()并将updateOffset()修改为offset = 0,扩展AppBarLayout.ScrollingViewBehavior

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child,
        View dependency) {
    updateOffset(parent, child, dependency);
    return false;
}

private boolean updateOffset(CoordinatorLayout parent, View child,
        View dependency) {
    final CoordinatorLayout.Behavior behavior = ((CoordinatorLayout.LayoutParams) dependency
            .getLayoutParams()).getBehavior();
    if (behavior instanceof Behavior) {
        // Offset the child so that it is below the app-bar (with any
        // overlap)
        final int offset = 0;   // CHANGED TO 0
        setTopAndBottomOffset(offset);
        return true;
    }
    return false;
}

新内容的行为:在滚动视图上设置行为

<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout_behavior="AppbBarTransparentScrollingViewBehavior" />

结果:将NestedScrollView内的ImageView作为滚动视图

enter image description here

转载注明原文:android – 如何创建与CoordinatorLayout的内容重叠的AppBarLayout - 代码日志