【问题标题】:How to keep the toolbar fixed at the top when AppBar collapses/expands?AppBar折叠/展开时如何保持工具栏固定在顶部?
【发布时间】:2023-04-05 02:21:01
【问题描述】:

概述

我正在尝试实现 Scrolling Techniques 之一,具有重叠内容的灵活空间,在 Material Design 中进行了描述。

内容重叠的灵活空间

内容可以与应用栏重叠。

行为:

应用栏的起始位置应位于内容的后面。 向上滚动时,应用栏的滚动速度应该比内容快, 直到内容不再与它重叠。一旦固定到位, 应用栏抬起以允许内容在下方滚动。

https://www.google.co.in/design/spec/patterns/scrolling-techniques.html#scrolling-techniques-scrolling


问题

但是,问题是, 我的 AppBar 中的标题在展开时会向下滚动并隐藏在重叠内容下方。

在这里,我的工具栏隐藏在重叠的 CardView 下方。

当应用栏折叠时,工具栏和标题会从下方向上滑动。

代码

这是我的代码:

activity-main.xml

<android.support.design.widget.CoordinatorLayout 
    ...
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            ...
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:layout_gravity="top"
                android:background="?attr/colorPrimary"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ...

我还在我的 MainActivity 的 onCreate 函数中添加了这些

    setSupportActionBar(toolbar);

    collapsingToolbarLayout.setTitle("App Name");

我希望工具栏(带有磁贴和其他内容,我稍后会添加)保持在顶部,而不管应用栏是展开还是折叠。

我阅读了文档,浏览了许多帖子和教程,观看了很多视频,但根本找不到有效的解决方案或任何相关的解决方案。

如果有人对如何解决此问题有一些想法,请提出建议。感谢您的帮助。

【问题讨论】:

    标签: android material-design android-appbarlayout


    【解决方案1】:

    当我在类似问题报告的 cmets 中找到答案时,我自己也在寻找解决方案。

    基本上你像这样在CollapsingToolbarLayout 上调用setTitleEnabled()

    CollapsingToolbarLayout.setTitleEnabled(false);
    

    您也可以在 xml 中执行此操作,方法是将其添加到您的 CollapsingToolbarLayout:

    app:titleEnabled="false"
    

    通过将其设置为false,您将获得所需的行为。标题固定在屏幕顶部。

    Toolbar 本身实际上已经在顶部,但这使得标题也保留在那里,而不是在 CollapsingToolbarLayout 的底部和 Toolbar 之间进行转换。

    【讨论】:

    • 谢谢,我的笔记本电脑修好后会尽快尝试。
    • 我试过了,titleEnabled=false 的标题保持在顶部,但奇怪的是现在标题字符串始终是活动标签。在CollapsingToolbarLayoutToolbar 上调用setTitle 本身无效。不知道这是否符合预期。
    【解决方案2】:

    我通过在Toolbar 标签内添加以下代码实现了这一点。

    app:layout_collapseMode="pin"
    

    【讨论】:

      【解决方案3】:

      就我而言,我需要将app:titleEnabled="false" 添加到CollapsingToolbarLayout AND app:layout_collapseMode="pin"android.support.v7.widget.Toolbar

      现在,无论用户是向上还是向下滚动,工具栏都会固定在屏幕顶部。

      【讨论】:

        【解决方案4】:

        要保持标题在顶部,只需将此属性添加到您的CollapsingToolbarLayout

        app:expandedTitleGravity="top"
        

        【讨论】:

        • 这是对我有用的解决方案。我认为许多不同的解决方案是因为您可以实施多种方式。对我来说,这很有效,因为我的 CollapsingToolbar 布局中有一个 androidx 工具栏,并且我通过 CollapsingToolbar 设置文本(而不是直接到工具栏)。当人们发布解决方案时,需要更多地说明这些事情。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-04
        • 2015-08-14
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        相关资源
        最近更新 更多