如果不需要,防止CollapsingToolbarLayout折叠

38

使用:

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张卡片(只剩下一张)。有没有办法防止工具栏折叠并显示一个空白区域?

enter image description here


1
我并没有真正找到解决方案,但是现在我正在使用 https://github.com/henrytao-me/smooth-app-bar-layout,并且我没有这个问题(因为实现方式不同)。 - stankocken
你对此做了什么? - Anthony
这是你需要的自定义滚动视图行为 - Vasil Stolyarchuk
6个回答

37
Cheesesquare示例中实现这样的行为,只需修改NestedScrollView的android:layout_height参数为wrap_content即可。如果内容足够小以适合屏幕,则可以防止通过内容滚动。
为了防止通过CollapsingToolbarLayout滚动,您应该通过编程方式将layout_scrollFlags参数设置为AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP值。 这里描述了如何做到这一点。

1
或者在 XML 文件中,将 app:layout_scrollFlags="snap" 添加到 CollapsingToolbarLayout 标签中。 - Andrii Kovalchuk
1
那么嵌套的ScrollView很不错,但折叠工具栏仍然可滚动。 - Sheychan
3
layout_scrollFlags属性不起作用。 使用这个解决方法可以禁用CollapsingToolbarLayout的滚动。 https://dev59.com/g1kR5IYBdhLWcg3w2wl1#40750707 这是一个有效的方法,真的可以运行!) - maXp
在我的情况下,wrap_content 解决了问题。布局中包含 AppBarLayoutNestedScrollView - iroiroys

5
您可以使用以下代码实现此功能:
   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);
}

适合我需要的! - Den

2
在 XML 中,我已经使用以下属性:app:layout_scrollFlags="snap",在 <android.support.design.widget.CollapsingToolbarLayout 中。
并且在活动中遵循以下内容。
 toolbar = (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(toolbar);
 toolbar.setTitle(null);
 toolbar.setCollapsible(false);

现在它正在工作。


2
一个数据绑定解决方案,灵感来自于@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
    }

0

这是我的工作代码,用于最初折叠栏:

_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_width="match_parent"
    android:layout_height="@dimen/detail_backdrop_height"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        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_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

            app:layout_collapseMode="pin" />





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

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

参考文献:AppBarLayout.setExpanded(boolean)


问题是如何防止崩溃。 - Leo DroidCoder

0
  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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接