如何解决 Material Design 下 AppbarLayout 可移动过程中有剩余空白的问题

阅读时长 5 分钟读完

在 Material Design 设计风格下,AppbarLayout 是非常重要的组件,它可以为应用提供一个美观的顶部导航栏,并且可以实现滚动隐藏、可移动等动态效果。但是在使用中,你可能会遇到一些困惑,例如可移动过程中会出现剩余空白的情况。接下来,我将会介绍如何解决这个问题。

前置知识

在开始解决这个问题之前,需要对以下知识有一定的了解:

  • Material Design
  • AppBarLayout 和 Toolbar
  • CoordinatorLayout

因此,如果你对以上这些内容还不太熟悉,建议先去学习一下它们的基础知识。

问题分析

在使用 AppbarLayout 可移动效果时,会出现剩余空白的情况,如下图所示:

分析问题,我们可以发现,当 AppbarLayout 向上移动时,其内部包含的 Toolbar 也会向上移动,如果 AppbarLayout 移动到最顶部,其内部的 Toolbar 就会被顶出视图的顶部,此时就会留下一个空白区域。那么我们需要解决的问题就是如何在 AppbarLayout 移动到顶部时,让 Toolbar 能够正确地停留在视图的顶部。

解决方案

解决这个问题有多种方法,下面我将介绍两种比较常见的方法:

方法一:使用 app:layout_scrollFlags

通过设置 app:layout_scrollFlags 属性可以实现 AppbarLayout 的可移动和滚动隐藏效果,同时也可以解决上述问题。

具体做法是,在 AppbarLayout 的内部包含一个 Toolbar,并在 Toolbar 的布局文件中设置 app:layout_scrollFlags="scroll|enterAlways|snap" 属性,如下所示:

-- -------------------- ---- -------
------------------------------------------------
    -----------------------------------
    -------------------------------------

    ---------------------------------------------------
        -----------------------------------
        -------------------------------------------
        ----------------------------------------
        ------------------------------------------------ --

    ---- ---------- ---

--------------------------------------------------

解释一下 app:layout_scrollFlags 属性的含义:

  • scroll 表示当内容向上滚动时,AppbarLayout 会向上滚动;
  • enterAlways 表示无论手指向上滑动还是向下滑动,AppbarLayout 都会向上滑动,并且不会完全隐藏;
  • snap 表示当 AppbarLayout 停止滑动时,会自动向上或向下“弹”一下,直到完全显示或隐藏。

设置了这些属性之后,当 AppbarLayout 向上移动时,其内部的 Toolbar 就会与视图的顶部对齐,避免了空白区域的出现。

方法二:使用 marginTop

使用 marginTop 属性也可以解决这个问题,不过需要通过编写代码来完成。

方法是,在布局文件中使用 app:layout_scrollFlags="scroll|enterAlwaysCollapsed" 属性,如下所示:

-- -------------------- ---- -------
------------------------------------------------
    -------------------------
    -----------------------------------
    ------------------------------------
    -----------------------------------------------------

    ---------------------------------------------------
        -------------------------
        -----------------------------------
        -------------------------------------------
        ------------------------------------------

--------------------------------------------------

然后在代码中,找到 Toolbar,并把其 marginTop 属性设置为状态栏的高度即可,如下所示:

-- -------------------- ---- -------
-- --------
--- --------------- - -------------------------------------

-- -- -------
------- ------- - ---------------------------

-- -- ------- - --------- --
---------------------------- ------------ - ------------------------------ --------------------------
-------------------------- ---------------- -- ---
--------------------------------------

设置完毕后,在 AppbarLayout 向上移动时,Toolbar 就会与状态栏紧密贴合,避免了空白区域的出现。

总结

本文介绍了两种解决 AppbarLayout 可移动过程中有剩余空白的问题的方法,分别是通过设置 app:layout_scrollFlags 属性和使用 marginTop 属性。这些解决方案都比较简单易懂,希望能对前端开发者们有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6594c64aeb4cecbf2d90b5c6

纠错
反馈