滚动没有内容时如何禁用 CollapsingToolbar 的折叠?

Posted

技术标签:

【中文标题】滚动没有内容时如何禁用 CollapsingToolbar 的折叠?【英文标题】:How to disable CollapsingToolbar's collapse when scroll has not content? 【发布时间】:2015-12-10 00:53:46 【问题描述】:

我正在使用 android support design 'com.android.support:design:22.2.1' 我的问题是当滚动中没有内容时,折叠工具栏仍然启用折叠动作。如果滚动中没有内容,我需要删除视图的折叠。

我的 XML :

  <android.support.design.widget.CoordinatorLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_
            android:layout_
            android:fitsSystemWindows="true">

            <android.support.design.widget.AppBarLayout
                android:id="@+id/appbar"
                android:layout_
                android:layout_
                android:fitsSystemWindows="true"
                android:background="@android:color/white"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

                <android.support.design.widget.CollapsingToolbarLayout
                    android:id="@+id/collapsing_toolbar"
                    android:layout_
                    android:layout_
                    android:fitsSystemWindows="true"
                    app:contentScrim="?attr/colorPrimary"
                    app:expandedTitleMarginEnd="64dp"
                    app:expandedTitleMarginStart="48dp"
                    app:layout_scrollFlags="scroll|exitUntilCollapsed">

                    <fragment
                        android:id="@+id/pawfile_header"
                        android:name="com.lightbulb.pawesome.fragments.PawfileHeaderFragment"
                        android:layout_
                        android:layout_
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="10dp"
                        android:fitsSystemWindows="true"
                        app:layout_collapseMode="parallax" />

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

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

            <fragment
                android:id="@+id/pawfile_timeline"
                android:name="com.lightbulb.pawesome.user_timeline.PawesomeUserTimelineFragment"
                android:layout_
                android:layout_
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

UDPATE 问题:

我已完成禁用和启用视图折叠。我使用这行代码来禁用折叠:

AppBarLayout.LayoutParams appbarParams = (AppBarLayout.LayoutParams)     collapsingToolbar.getLayoutParams();
appbarParams.setScrollFlags(0);
collapsingToolbar.setLayoutParams(p);

问题是 appbar 强制将滚动标志的高度设置为 0。我尝试使用 appbar.setElevation(0) 但它没有效果。如何从我的应用栏中删除海拔高度?

【问题讨论】:

app:layout_scrollFlags = "none"。这行得通吗? 我怎样才能以编程方式做到这一点 这里有一个很好的评论***.com/q/32398500/2506817:“当我使用NestedScrollView(带有wrap_content 属性)作为主容器并使用TextView 作为子容器时,AppBarLayout 可以正常工作并且不滚动。” 请查看此答案custom scrolling view behavior 请查看此答案custom scrolling view behavior 【参考方案1】:

获取您的 appbarlayout 参考并设置 setScrollFlags。

AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
p.setScrollFlags(0);
toolbar.setLayoutParams(p);

【讨论】:

这很有帮助!但我怎样才能扭转崩溃 更新相同的参考developer.android.com/reference/android/support/design/widget/… 我无法恢复视图的折叠... setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) 但无法启用折叠 试试这个 setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); 如何从应用栏移除海拔高度?当我将滚动标志设置为 0 时,最终应用栏将显示一个高度。【参考方案2】:

尝试使用appbarParams.setScrollFlags(-1);appBarLayout.setExpanded(true, true) 移除海拔高度。

如果你在片段中有recyclerView,试试recyclerView.setNestedScrollingEnabled(false);

Need to disable expand on CollapsingToolbarLayout for certain fragments

【讨论】:

setScrollFlags 将工具栏保持在展开状态。 setNestedScrollingEnabled 可以保留位置。这对我来说是最干净的解决方案。 你能解释一下为什么 appBarLayout.setExpanded(true, true) 会移除海拔吗?因为对我来说不是。【参考方案3】:

为了阻止 collapsingtoolbar 的崩溃不要给

app:layout_scrollFlags="scroll|exitUntilCollapsed" 在 XML 文件中..您可以删除该代码

【讨论】:

糟糕的理事会。这样即使有内容滚动也不会折叠。【参考方案4】:

“滚动中没有内容”,我认为您的意思是“没有片段”。为此,我认为您必须首先将 &lt;fragment&gt; 更改为 &lt;FrameLayout&gt; ,然后使用 getFragmentManager().beginTransaction() 以编程方式添加片段,然后检查片段是否存在(即不为空),如下所示:

    if (getFragmentManager().findFragmentById(R.id.fragment_name) != null)  
           // here try RKNP's code to disable the appBar from collapsing 
    

【讨论】:

以上是关于滚动没有内容时如何禁用 CollapsingToolbar 的折叠?的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITableView如何禁用滚动到底部弹跳

滚动可拖动项目的内容时禁用jQuery拖动

如何根据文本视图内容大小设置滚动视图中的启用或禁用滚动?

如何禁用滚动文档正文?

添加文本和禁用滚动时如何使 UITextView 字段扩展?

禁用滚动条