在AppBarLayout中滚动第二个孩子

时间:2016-01-13 07:30:59

标签: android android-coordinatorlayout android-appbarlayout custom-scrolling

我试图获得此效果,如果用户滚动RecyclerView某个布局与回收者一起滚动并消失在Toolbar后面。

使用CoordinatorLayout可以获得类似的行为,这可以通过设置

来实现
app:layout_behavior="@string/appbar_scrolling_view_behavior"

在上述Recycler上,正在做

<android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_scrollFlags="scroll|enterAlways"/>

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

另外,如果我将第二个孩子放在AppBarLayout内,并将app:layout_scrollFlags设置为它,则获得的效果是相同的,两个布局都与Recycler一起滚动。

我想要实现的是将第一个孩子(工具栏)固定在适当位置,让第二个孩子(LinearLayout)滚动并隐藏在工具栏后面。不幸的是,我无法解决这个问题。

不使用第3部分库可以吗? 提前致谢,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

最后,我找到了一种实现此行为的方法,方法是将CoordinatorLayout包含在LinearLayout中,然后通过将工具栏移至extrnal(根)级别,使第二个子项(LinearLayout)成为第一个子项。

以前的阶层:

<CoordinatorLayout>
 <AppBarLayout>
  <ToolBar>
  <LinerarLayout>

之后的阶层:

<LinearLayout>
  <ToolBar>
  <CoordinatorLayout>
   <AppBarLayout>
     <LinearLayout>

例如:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        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"
        android:orientation="vertical">
        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="48dp" />
        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <com.google.android.material.appbar.AppBarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:elevation="16dp">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorSecondaryLight"
                    android:orientation="vertical"
                    app:layout_scrollFlags="scroll"/>
                </com.google.android.material.appbar.AppBarLayout>
                .
                .
                .
                .
            </androidx.coordinatorlayout.widget.CoordinatorLayout>
    </LinearLayout>

希望有帮助!