我正在使用带有(通常)一个片段作为内容的Activity类。在活动中,我CollapsingToolbarLayout
用作某些信息的标头,并且一切正常。但是在某些情况下(当附加了一些片段时),我不想显示该信息,也不想CollapsingToolbarLayout
滚动打开。
我要实现的是锁定CollapsingToolbarLayout
,防止它从片段中打开。我正在以编程方式将其折叠appBarLayout.setExpanded(false, true);
我想出了另一种方法,因为设置嵌套滚动标记仅在拖动NestedScrollView时才有效。仍然可以通过在应用栏上滑动来扩展应用栏。
我在“ Utils”类中将其设置为静态函数。显然,您在解锁时设置的标志将取决于与您的用例相关的标志。
此功能假定您从扩展的工具栏开始
public static void LockToolbar(boolean locked, final AppBarLayout appbar, final CollapsingToolbarLayout toolbar) { if (locked) { // We want to lock so add the listener and collapse the toolbar appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (toolbar.getHeight() + verticalOffset < 2 * ViewCompat.getMinimumHeight(toolbar)) { // Now fully expanded again so remove the listener appbar.removeOnOffsetChangedListener(this); } else { // Fully collapsed so set the flags to lock the toolbar AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); lp.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED); } } }); appbar.setExpanded(false, true); } else { // Unlock by restoring the flags and then expand AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); lp.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); appbar.setExpanded(true, true); } }