Material Design 中 AppBarLayout 和 CoordinatorLayout 联动的技巧

阅读时长 18 分钟读完

Material Design 是一种非常流行的设计语言,它提供了一种现代化、直观化的设计风格,被广泛应用在 Web、移动设备和桌面应用中。在 Material Design 中,AppBarLayout 和 CoordinatorLayout 是两个非常重要的布局组件,它们可以实现联动效果,提升用户体验。本文将介绍 Material Design 中 AppBarLayout 和 CoordinatorLayout 联动的技巧,并提供示例代码,方便读者学习和实践。

什么是 AppBarLayout 和 CoordinatorLayout

在介绍 AppBarLayout 和 CoordinatorLayout 联动之前,我们先来了解一下它们的作用和特点。

AppBarLayout

AppBarLayout 是一种可滚动的布局容器,它通常用于实现应用的顶部导航栏、标题栏和工具栏等功能。AppBarLayout 可以通过设置与它相邻的 ScrollView、RecyclerView、NestedScrollView 等子布局的滚动行为(scrollFlags)来实现联动效果。

CoordinatorLayout

CoordinatorLayout 是 Android Support Library 中的一个布局容器,它可以协调子布局之间的交互行为,使它们具有更加灵活的联动效果。例如,在 CoordinatorLayout 中,我们可以实现 AppBarLayout 和 FloatingActionButton 之间的联动效果,使得 FloatingActionButton 在 AppBarLayout 加载更多内容时自动隐藏或显示。CoordinatorLayout 还可以通过设置 Behavior 来自定义子布局之间的交互行为。

下面是一个简单的示例,展示了如何在 CoordinatorLayout 中添加 AppBarLayout 和 FloatingActionButton,并通过设置 Behavior 来实现联动效果:

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

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

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

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

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

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

--------------------------------------------------
展开代码
-- -------------------- ---- -------
-- ---------------

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

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

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

    ---------
    ------ ---- -------------------------------- ------------------ -------------------- ------
                               ---- ------- --- ----------- --- ----------- --- ------------- --- ------------- -
        -- ----------- - - -- --------------------- -- ------------- -
            -------------
        - ---- -- ----------- - - -- --------------------- -- ------------- -
            -------------
        -
    -
-
展开代码

AppBarLayout 和 CoordinatorLayout 联动的技巧

在上面的示例中,我们展示了如何在 CoordinatorLayout 中添加 AppBarLayout 和 FloatingActionButton,并通过设置 Behavior 来实现联动效果。但是,如果我们需要实现更加复杂的联动效果,应该如何处理呢?下面是一些技巧,帮助你在 Material Design 中处理 AppBarLayout 和 CoordinatorLayout 的联动。

设置 AppBarLayout 的 scrollFlags

在使用 AppBarLayout 时,我们可以设置它与子布局的滚动行为(scrollFlags),来实现联动效果。例如,我们可以设置 Toolbar 在滚动时从屏幕顶部滑出,并在滑出后固定在屏幕顶部的位置:

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

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

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

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

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

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

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

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

--------------------------------------------------
展开代码

其中,我们在 Toolbar 中设置了 layout_scrollFlags 属性,它的值为 scroll|enterAlways。这表示在滑动时,Toolbar 会从屏幕顶部滑出,并在滑出后固定在屏幕顶部的位置。

我们还可以设置其他的滚动行为,例如:

  • scroll:表示子布局随着滚动而滚动;
  • enterAlways:表示子布局在屏幕顶部时总是可见;
  • enterAlwaysCollapsed:表示子布局在屏幕顶部时只有部分可见,快速滑动时才会完全展开;
  • exitUntilCollapsed:表示子布局在滑出屏幕时保留一部分可见。

通过设置不同的滚动行为,我们可以实现不同的联动效果。

自定义 Behavior

在 CoordinatorLayout 中,每个子布局都可以设置 Behavior,通过自定义 Behavior,我们可以实现更加灵活的联动效果。例如,我们可以在实现一个 Behavior,让一个视图随着滚动在屏幕上浮动:

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

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

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

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

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

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

    ---------
    ------ ------- ---------------------------------------- ------- ---- ------ ---- ----------- -
        -- ----------- ---------- ------------- -
            ------------------------------ -- - -------------------------------- ------------------------
            --- ------------ - ----------------
            --- ---------------- - ----------------- - -------------
            ----- ----- - ----------------- - ------- ---------------
            --------------------------------------- - -------
        -
        ------ -----
    -
-
展开代码

然后,我们可以在布局文件中将需要实现浮动效果的视图的 Behavior 设置为 FloatBehavior:

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

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

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

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

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

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

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

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

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

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

--------------------------------------------------
展开代码

通过自定义 Behavior,我们可以实现非常自由的联动效果。虽然它需要一些额外的代码工作,但是它可以帮助我们实现更加灵活的设计。

同时使用多个 AppBarLayout

在某些情况下,我们需要使用多个 AppBarLayout,例如,当一个页面由多个子页面组成时,我们可以为每个子页面设置一个 AppBarLayout,以达到切换时联动的效果。但是,使用多个 AppBarLayout 时,我们需要注意以下几点:

  • 为 Layout 设置 app:layout_scrollFlags,控制子布局的联动效果;
  • 将所有 AppBarLayout 设置 android:fitsSystemWindows 属性,保证页面布局适配系统状态栏;
  • 将每个 AppBarLayout 的 Theme 设置为 @style/ThemeOverlay.AppCompat.Dark.ActionBar,以保证颜色一致;
  • 设置第一个 AppBarLayout 的 layout_scrollFlags 属性为 enterAlways|scroll,使得第一个 AppBarLayout 始终显示在屏幕顶部。

下面是一个示例代码:

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

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

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

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

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

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

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

--------------------------------------------------
展开代码

通过以上步骤,我们就可以在 Material Design 中正确使用多个 AppBarLayout,并实现动态显示或隐藏的联动效果。

结语

Material Design 中,AppBarLayout 和 CoordinatorLayout 是非常重要的布局组件,掌握它们的联动技巧可以提升用户体验。在本文中,我们介绍了如何使用 CoordinatorLayout 实现简单的联动效果,以及如何通过自定义 Behavior 实现更加复杂的效果。希望读者掌握了这些知识后,能够在实践中灵活运用,提升应用的质量和效果。

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

纠错
反馈

纠错反馈