更新时,CollapsingToolbarLayout 出现在 RecyclerView 下
CollapsingToolbarLayout is appearing under RecyclerView when updated
我在片段中设置了一个带有 CollapsingToolbar 和 RecyclerView 的 CoordinatorLayout:
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wholeCoordinatorLayout"
android:animateLayoutChanges="true"
android:background="@color/my_background">
<android.support.design.widget.AppBarLayout
android:id="@+id/myAppBarLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/expanded_height"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@color/collapsed_color"
app:expandedTitleMarginBottom="12dp"
app:expandedTitleTextAppearance="@style/TransparentText"
app:collapsedTitleTextAppearance="@style/CollapsedAppBar"
app:expandedTitleGravity="top|center_horizontal"
app:collapsedTitleGravity="center"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/bannerBgImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/banner_bg"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/headerTextLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="@dimen/collapsed_height"
android:orientation="vertical"
app:layout_collapseMode="parallax"
android:paddingTop="10dp">
<TextView
android:id="@+id/headerLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/title"
android:textSize="20dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
fontPath="@string/bold_font"
android:textColor="@color/my_text_color"
android:layout_gravity="center_horizontal"
android:gravity="center" />
<TextView
android:id="@+id/mainLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/text_main"
android:textSize="15dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/my_text_color"
android:layout_gravity="center_horizontal"
android:gravity="center" />
<Button
android:id="@+id/expandedButton"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="18dp"
android:layout_marginLeft="60dp"
android:layout_marginRight="60dp"
android:background="@drawable/my_button"
android:text="@string/button_text"
android:textSize="15dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:textColor="@color/button_text_color" />
</LinearLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/collapsed_height"
android:layout_gravity="top"
app:layout_scrollFlags="scroll|enterAlways" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<include
layout="@layout/recycler_listview" />
</android.support.design.widget.CoordinatorLayout>
一切正常,我可以上下滚动,工具栏展开和折叠。
但是:
在我的应用程序生命周期的某些时刻,列表中的数据会发生变化(显示在 RecyclerView 中)。我的 RacyclerView.ListAdapter 中有一个侦听器,当它注册数据更改时,它会调用 NotifyDataSetChanged
来更新列表。发生这种情况时,我的列表(当然)会重绘,但由于某种原因,它会重绘到折叠的工具栏上。我不确定是否发生了这种情况,因为我的工具栏刚刚消失了,但是当我将 LinearListAdapter 更改为 GridListAdapter 时,我可以看到网格项后面的工具栏。一旦我开始滚动一点,列表就会使用列表上方的工具栏自行调整 - 但我想阻止这种情况发生。有谁知道我需要什么魔法吗?
我已经覆盖了 RecyclerView.AdapterDataObserver
这样我就可以在收到通知时做一些事情...问题是什么?
嗯,设置 CollapsingToolbar Gone 然后 Visible 再次起作用....虽然看起来很随机。
将以下代码行添加到 recycler_listview:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
以上代码告诉 CollapsingToolbarLayout 将在屏幕上滚动的内容,因此应该出现在 CollapsingToolbarLayout 下方。
我在片段中设置了一个带有 CollapsingToolbar 和 RecyclerView 的 CoordinatorLayout:
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wholeCoordinatorLayout"
android:animateLayoutChanges="true"
android:background="@color/my_background">
<android.support.design.widget.AppBarLayout
android:id="@+id/myAppBarLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/expanded_height"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@color/collapsed_color"
app:expandedTitleMarginBottom="12dp"
app:expandedTitleTextAppearance="@style/TransparentText"
app:collapsedTitleTextAppearance="@style/CollapsedAppBar"
app:expandedTitleGravity="top|center_horizontal"
app:collapsedTitleGravity="center"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/bannerBgImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/banner_bg"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/headerTextLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="@dimen/collapsed_height"
android:orientation="vertical"
app:layout_collapseMode="parallax"
android:paddingTop="10dp">
<TextView
android:id="@+id/headerLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/title"
android:textSize="20dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
fontPath="@string/bold_font"
android:textColor="@color/my_text_color"
android:layout_gravity="center_horizontal"
android:gravity="center" />
<TextView
android:id="@+id/mainLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/text_main"
android:textSize="15dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/my_text_color"
android:layout_gravity="center_horizontal"
android:gravity="center" />
<Button
android:id="@+id/expandedButton"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="18dp"
android:layout_marginLeft="60dp"
android:layout_marginRight="60dp"
android:background="@drawable/my_button"
android:text="@string/button_text"
android:textSize="15dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:textColor="@color/button_text_color" />
</LinearLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/collapsed_height"
android:layout_gravity="top"
app:layout_scrollFlags="scroll|enterAlways" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<include
layout="@layout/recycler_listview" />
</android.support.design.widget.CoordinatorLayout>
一切正常,我可以上下滚动,工具栏展开和折叠。
但是:
在我的应用程序生命周期的某些时刻,列表中的数据会发生变化(显示在 RecyclerView 中)。我的 RacyclerView.ListAdapter 中有一个侦听器,当它注册数据更改时,它会调用 NotifyDataSetChanged
来更新列表。发生这种情况时,我的列表(当然)会重绘,但由于某种原因,它会重绘到折叠的工具栏上。我不确定是否发生了这种情况,因为我的工具栏刚刚消失了,但是当我将 LinearListAdapter 更改为 GridListAdapter 时,我可以看到网格项后面的工具栏。一旦我开始滚动一点,列表就会使用列表上方的工具栏自行调整 - 但我想阻止这种情况发生。有谁知道我需要什么魔法吗?
我已经覆盖了 RecyclerView.AdapterDataObserver
这样我就可以在收到通知时做一些事情...问题是什么?
嗯,设置 CollapsingToolbar Gone 然后 Visible 再次起作用....虽然看起来很随机。
将以下代码行添加到 recycler_listview:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
以上代码告诉 CollapsingToolbarLayout 将在屏幕上滚动的内容,因此应该出现在 CollapsingToolbarLayout 下方。