如果不需要,防止 CollapsingToolbarLayout 折叠
Posted
技术标签:
【中文标题】如果不需要,防止 CollapsingToolbarLayout 折叠【英文标题】:Prevent CollapsingToolbarLayout collapse if not needed 【发布时间】:2015-11-24 03:02:01 【问题描述】:使用:
compile 'com.android.support:design:23.0.0'
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.android.support:cardview-v7:23.0.0'
compile 'com.android.support:recyclerview-v7:23.0.0'
随着项目Cheesesquare 的更新。
在奶酪的细节中,我删除了 2 张卡片(只有一张)。有没有办法防止显示空白的工具栏折叠?
【问题讨论】:
我并没有真正找到解决方案,但是我现在使用github.com/henrytao-me/smooth-app-bar-layout 并且我没有这个问题(因为实现方式不同) 你做了什么? 这就是你需要的custom scrolling view behavior 【参考方案1】:要在Cheesesquare 示例中实现这种行为,只需将NestedScrollView 的android:layout_height
参数修改为wrap_content
。
如果它足够小以适合屏幕,它将阻止按内容滚动。
为了防止滚动CollapsingToolbarLayout
,您应该以编程方式将layout_scrollFlags
参数设置为AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
值。
Here 描述了如何做到这一点。
【讨论】:
或者在xml中添加app:layout_scrollFlags="snap"
到CollapsingToolbarLayout标签
那么嵌套滚动视图很好但是折叠工具栏仍然可以滚动
layout_scrollFlags 不起作用。使用此解决方法禁用 CollapsingToolbarLayout 滚动。 ***.com/a/40750707/3094065 这是真的方法,真的有效! )【参考方案2】:
您可以使用以下代码:
public static void stopScroll()
AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsing_toolbar.getLayoutParams();
toolbarLayoutParams.setScrollFlags(0);
collapsing_toolbar.setLayoutParams(toolbarLayoutParams);
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
appBarLayoutParams.setBehavior(null);
appbar.setLayoutParams(appBarLayoutParams);
public static void startScroll()
AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsing_toolbar.getLayoutParams();
toolbarLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
collapsing_toolbar.setLayoutParams(toolbarLayoutParams);
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
appbar.setLayoutParams(appBarLayoutParams);
【讨论】:
随心所欲地为我工作!【参考方案3】:在xml中我使用了属性
app:layout_scrollFlags="snap"
在<android.support.design.widget.CollapsingToolbarLayout
并在活动中关注
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitle(null);
toolbar.setCollapsible(false);
它现在正在工作。
【讨论】:
【参考方案4】:受@Vishal 回答启发的数据绑定解决方案
<com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.appbar.CollapsingToolbarLayout
app:enableCollapsingScroll="@listItems.size > 0"
... />
</com.google.android.material.appbar.AppBarLayout>
@BindingAdapter("app:enableCollapsingScroll")
fun setCollapsingToolbarLayoutScrollEnabled(collapsingToolbarLayout: CollapsingToolbarLayout, enabled: Boolean?)
val lp = collapsingToolbarLayout.layoutParams as AppBarLayout.LayoutParams
if (enabled.orFalse())
lp.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL or AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
else
lp.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
collapsingToolbarLayout.layoutParams = lp
【讨论】:
【参考方案5】:这是我的工作代码,最初折叠栏:
_appbar.setExpanded(false);
AppBarLayout _appbar = (AppBarLayout) findViewById(R.id.appbar);
_appbar.setExpanded(false);
这里是布局xml
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_
android:layout_
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_
android:layout_
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
参考是:AppBarLayout.setExpanded(boolean)
【讨论】:
问题是如何防止倒塌【参考方案6】: AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) activityUserGroupProfleBinding.collapsingToolbarLayout.getLayoutParams();
if (logic)
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
else
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP);
activityUserGroupProfleBinding.collapsingToolbarLayout.setLayoutParams(params);
【讨论】:
以上是关于如果不需要,防止 CollapsingToolbarLayout 折叠的主要内容,如果未能解决你的问题,请参考以下文章