CollapsingToolbarLayout 并在滚动时隐藏工具栏
CollapsingToolbarLayout and hide toolbar while scrolling
我正在尝试使用 CoordinatorLayout 和 CollapsingToolbarLayout 创建一些组合布局。
在第一种状态下,当我们在最顶部的页面上,还没有滚动时,我希望工具栏展开如下所示(是的,我做到了):
第二种状态,开始向下滚动时,图片和工具栏应该消失,如下图(只有tab会显示):
在最后的状态下,一旦我在列表中的某个位置(但不是列表的顶部),我想开始向上滚动,一旦我开始向上滚动,我想要工具栏(而不是展开的工具栏)带图片)开始哇哦,如下图(如果没有到达列表顶部,图片不会显示,只显示工具栏):
我能够达到第一个状态,但其他两个状态有问题,
一旦工具栏在 CollapsingToolbarLayout 内实现,我在 CollapsingToolbarLayout 组件之外使用它的灵活性就不清楚了。
我不能让工具栏隐藏,如果我这样做,它只会在我到达顶部时显示。
反正我现在的XML(如下图)是第一张图实现的状态,但是一旦我开始向下滚动,工具栏就停留在最上面,没有隐藏。注意:我必须告诉工具栏保留 "pin",因为如果我不这样做,工具栏内的信息就会消失,只会显示一个空的工具栏(这是另一个 post,但它仍然很有趣知道为什么会这样吗?)。
这是我现在的 xml:
<android.support.design.widget.CoordinatorLayout
android:id="@+id/benefit_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_material_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
<include
android:id="@+id/toolbar_search_container"
layout="@layout/search_box"
android:layout_height="192dp"
android:layout_width="match_parent"
app:layout_collapseMode="parallax"
/>
<include
android:id="@+id/toolbar_benefit"
layout="@layout/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:contentScrim="?attr/colorPrimary"
/>
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/benefit_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
app:tabIndicatorColor="@color/accentColor"
app:tabSelectedTextColor="@android:color/white"
app:tabTextColor="@android:color/black"
app:tabIndicatorHeight="4dp" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/benefit_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<include
layout="@layout/floating_btn_benefits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
/>
</android.support.design.widget.CoordinatorLayou
我已经解决了这个问题,只是为了澄清,我希望我的工具栏在到达顶部后能够用视差图像展开,但我也希望工具栏在向下滚动时消失,然后再次显示自己(没有视差图像)一旦我向上滚动。 paralex 图像效果应该只在我到达顶部时显示。
所以基本上解决方案是,使用以下属性更改组件 CollapsingToolbarLayout
:
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
并使用以下属性更改工具栏组件
android:minHeight="?attr/actionBarSize"
关于我的视差效果图像(这是我的 toolbar_search_container
)我不应该向它添加任何 layout_scrollFlags
。
那么它为什么有效?
要理解它,你需要知道什么是enterAlwaysCollapsed
,
enterAlwaysCollapsed
影响添加了 minHeight
属性的视图。这意味着,CollapsingToolbarLayout
中具有 minHeight
的每个 child 都将受此属性影响。
所以我的工具栏会受到影响。
enterAlwaysCollapsed
属性定义简单的话:
假设声明了 enterAlways 并且您指定了 minHeight,您还可以指定 enterAlwaysCollapsed
。使用此设置时,您的视图将仅显示在此最小高度。只有当滚动到顶部时,视图才会扩展到它的全高..."
嗯,这不正是我们想要的吗? (不要回答这个反问;))
再补充一点,视差组件(toolbar_search_container
)是靠toolbar来展开的,因为toolbar只有到达顶部才会展开,所以这一切都很好用!
新密码是:
<android.support.design.widget.CoordinatorLayout
android:id="@+id/benefit_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_material_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
>
<include
android:id="@+id/toolbar_search_container"
layout="@layout/search_box"
android:layout_height="192dp"
android:layout_width="match_parent"
app:layout_collapseMode="parallax"
/>
<include
android:id="@+id/toolbar_benefit"
layout="@layout/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
app:contentScrim="?attr/colorPrimary"
app:layout_collapseMode="pin"
android:fitsSystemWindows="true"
/>
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/benefit_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
app:tabIndicatorColor="@color/accentColor"
app:tabSelectedTextColor="@android:color/white"
app:tabTextColor="@android:color/black"
app:tabIndicatorHeight="4dp" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/benefit_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<include
layout="@layout/floating_btn_benefits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
/>
</android.support.design.widget.CoordinatorLayout>
将这行代码添加到您的 CollapsingToolbarLayout
app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysCollapsed"
我正在尝试使用 CoordinatorLayout 和 CollapsingToolbarLayout 创建一些组合布局。
在第一种状态下,当我们在最顶部的页面上,还没有滚动时,我希望工具栏展开如下所示(是的,我做到了):
第二种状态,开始向下滚动时,图片和工具栏应该消失,如下图(只有tab会显示):
在最后的状态下,一旦我在列表中的某个位置(但不是列表的顶部),我想开始向上滚动,一旦我开始向上滚动,我想要工具栏(而不是展开的工具栏)带图片)开始哇哦,如下图(如果没有到达列表顶部,图片不会显示,只显示工具栏):
我能够达到第一个状态,但其他两个状态有问题, 一旦工具栏在 CollapsingToolbarLayout 内实现,我在 CollapsingToolbarLayout 组件之外使用它的灵活性就不清楚了。 我不能让工具栏隐藏,如果我这样做,它只会在我到达顶部时显示。
反正我现在的XML(如下图)是第一张图实现的状态,但是一旦我开始向下滚动,工具栏就停留在最上面,没有隐藏。注意:我必须告诉工具栏保留 "pin",因为如果我不这样做,工具栏内的信息就会消失,只会显示一个空的工具栏(这是另一个 post,但它仍然很有趣知道为什么会这样吗?)。
这是我现在的 xml:
<android.support.design.widget.CoordinatorLayout
android:id="@+id/benefit_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_material_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
<include
android:id="@+id/toolbar_search_container"
layout="@layout/search_box"
android:layout_height="192dp"
android:layout_width="match_parent"
app:layout_collapseMode="parallax"
/>
<include
android:id="@+id/toolbar_benefit"
layout="@layout/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:contentScrim="?attr/colorPrimary"
/>
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/benefit_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
app:tabIndicatorColor="@color/accentColor"
app:tabSelectedTextColor="@android:color/white"
app:tabTextColor="@android:color/black"
app:tabIndicatorHeight="4dp" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/benefit_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<include
layout="@layout/floating_btn_benefits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
/>
</android.support.design.widget.CoordinatorLayou
我已经解决了这个问题,只是为了澄清,我希望我的工具栏在到达顶部后能够用视差图像展开,但我也希望工具栏在向下滚动时消失,然后再次显示自己(没有视差图像)一旦我向上滚动。 paralex 图像效果应该只在我到达顶部时显示。
所以基本上解决方案是,使用以下属性更改组件 CollapsingToolbarLayout
:
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
并使用以下属性更改工具栏组件
android:minHeight="?attr/actionBarSize"
关于我的视差效果图像(这是我的 toolbar_search_container
)我不应该向它添加任何 layout_scrollFlags
。
那么它为什么有效?
要理解它,你需要知道什么是enterAlwaysCollapsed
,
enterAlwaysCollapsed
影响添加了 minHeight
属性的视图。这意味着,CollapsingToolbarLayout
中具有 minHeight
的每个 child 都将受此属性影响。
所以我的工具栏会受到影响。
enterAlwaysCollapsed
属性定义简单的话:
假设声明了 enterAlways 并且您指定了 minHeight,您还可以指定 enterAlwaysCollapsed
。使用此设置时,您的视图将仅显示在此最小高度。只有当滚动到顶部时,视图才会扩展到它的全高..."
嗯,这不正是我们想要的吗? (不要回答这个反问;))
再补充一点,视差组件(toolbar_search_container
)是靠toolbar来展开的,因为toolbar只有到达顶部才会展开,所以这一切都很好用!
新密码是:
<android.support.design.widget.CoordinatorLayout
android:id="@+id/benefit_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_material_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
>
<include
android:id="@+id/toolbar_search_container"
layout="@layout/search_box"
android:layout_height="192dp"
android:layout_width="match_parent"
app:layout_collapseMode="parallax"
/>
<include
android:id="@+id/toolbar_benefit"
layout="@layout/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
app:contentScrim="?attr/colorPrimary"
app:layout_collapseMode="pin"
android:fitsSystemWindows="true"
/>
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/benefit_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
app:tabIndicatorColor="@color/accentColor"
app:tabSelectedTextColor="@android:color/white"
app:tabTextColor="@android:color/black"
app:tabIndicatorHeight="4dp" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/benefit_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<include
layout="@layout/floating_btn_benefits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
/>
</android.support.design.widget.CoordinatorLayout>
将这行代码添加到您的 CollapsingToolbarLayout
app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysCollapsed"