Android AppBarLayout + CollapsingToolbarLayout + CoordinatorLayout
Android AppBarLayout + CollapsingToolbarLayout + CoordinatorLayout
这是我的布局层次结构
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout"
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:clipChildren="false"
android:clipToPadding="false"
android:theme="@style/AppThemeAppBarOverlay"
app:elevation="0dp">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout"
contentScrim="@color/transparent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
app:contentScrim="@color/transparent"
app:layout_scrollFlags="scroll|enterAlways">
<LinearLayout
android:id="@+id/openday_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical"
android:paddingTop="?attr/actionBarSize"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="1">
...</LinearLayout>
<android.support.v7.widget.Toolbar 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/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:clipChildren="false"
android:clipToPadding="false"
app:layout_collapseMode="pin"
app:layout_scrollFlags="snap|exitUntilCollapsed"
app:popupTheme="@style/AppThemePopupOverlay" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/card_view_margin_bt"
android:background="@color/windowBackground"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:listitem="@layout/card_item" />
</android.support.design.widget.CoordinatorLayout>
<include layout="@layout/navigation_view" />
我有两个问题:
当 appbarLayout 展开时,我在 recyclerView 中执行快速向上滚动,recyclerView 滚动非常快,同时折叠工具栏开始折叠。这不应该发生。我只想在 collapsingLayout 完全折叠时允许在 recyclerView 中滚动。我认为问题与 recyclerView fling 有关,因为如果我缓慢滚动它,则不会发生此错误。我正在尝试为此找到解决方法。
第二件事是,当 activity 启动时,appbar 会展开。我希望它开始折叠,它适用于
appBarLayout.setExpanded(假,真)
但是使用这种方法,工具栏也被折叠了。我只想折叠 appBarLayout header 而不是工具栏。
第一个问题与 clipToPadding
干扰 recyclerView 滚动有关。刚刚删除它,故障就消失了。
第二个问题已通过删除所有工具栏标志并在 appBarLayout 侦听器中手动转换视图来解决。不知道这是否是最好的做法,但对我来说效果很好。
这是我的布局层次结构
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout"
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:clipChildren="false"
android:clipToPadding="false"
android:theme="@style/AppThemeAppBarOverlay"
app:elevation="0dp">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout"
contentScrim="@color/transparent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
app:contentScrim="@color/transparent"
app:layout_scrollFlags="scroll|enterAlways">
<LinearLayout
android:id="@+id/openday_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical"
android:paddingTop="?attr/actionBarSize"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="1">
...</LinearLayout>
<android.support.v7.widget.Toolbar 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/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:clipChildren="false"
android:clipToPadding="false"
app:layout_collapseMode="pin"
app:layout_scrollFlags="snap|exitUntilCollapsed"
app:popupTheme="@style/AppThemePopupOverlay" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/card_view_margin_bt"
android:background="@color/windowBackground"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:listitem="@layout/card_item" />
</android.support.design.widget.CoordinatorLayout>
<include layout="@layout/navigation_view" />
我有两个问题:
当 appbarLayout 展开时,我在 recyclerView 中执行快速向上滚动,recyclerView 滚动非常快,同时折叠工具栏开始折叠。这不应该发生。我只想在 collapsingLayout 完全折叠时允许在 recyclerView 中滚动。我认为问题与 recyclerView fling 有关,因为如果我缓慢滚动它,则不会发生此错误。我正在尝试为此找到解决方法。
第二件事是,当 activity 启动时,appbar 会展开。我希望它开始折叠,它适用于
appBarLayout.setExpanded(假,真)
但是使用这种方法,工具栏也被折叠了。我只想折叠 appBarLayout header 而不是工具栏。
第一个问题与 clipToPadding
干扰 recyclerView 滚动有关。刚刚删除它,故障就消失了。
第二个问题已通过删除所有工具栏标志并在 appBarLayout 侦听器中手动转换视图来解决。不知道这是否是最好的做法,但对我来说效果很好。