android - 如何从 Android 支持库中锁定 CollapsingToolbarLayout

标签 android android-fragments android-fragmentactivity android-collapsingtoolbarlayout

我正在使用 Activity 类,(通常)将一个 fragment 作为内容。在 Activity 中,我使用 CollapsingToolbarLayout 作为某些信息的某种 header ,一切正常。但在某些情况下(当附加了一些 fragment 时)我不想显示该信息,我不希望 CollapsingToolbarLayout 在滚动时打开。

我想实现的是锁定CollapsingToolbarLayout,防止它从 fragment 中打开。我正在使用 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);
    }

}

关于android - 如何从 Android 支持库中锁定 CollapsingToolbarLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34635499/

相关文章:

android - 从库中的图像访问位置数据

android - GCM 不适用于 Android 4.2.2?

android - 具有多个背景列表的屏幕

android - 如何更改 fragment Kotlin

android - 在android项目中使用ActionBarSherlock时没有这样的字段错误

android - 运行 Robotium 时 FragmentActivity 类的 java.lang.NoClassDefFoundError

android - 在 ViewModel 和 Fragment/Activity 交互和通信之间应用 MVVM

Android拦截 session 错误的通用模式,用屏幕处理错误,在错误前的同一点继续

android - 如何在 Fragment 类中加载 WebView?如何在android中加载Webview?

java - 了解 fragment Activity