Material Design 中 CoordinatorLayout 的使用详解

阅读时长 11 分钟读完

Material Design 是安卓平台上非常流行的 UI 设计风格,它有着丰富的动画、交互效果和视觉效果,可以极大的增强用户体验。而在 Material Design 中,CoordinatorLayout 是一个非常重要的控件,它可以很好的帮助 UI 组件进行协调,并支持各种交互行为。本文将详细介绍 CoordinatorLayout 的使用方法,并给出相应的示例代码。

什么是 CoordinatorLayout

CoordinatorLayout 是一个继承自 ViewGroup 的控件,它的主要作用是协调其他组件的行为。可以理解为一个控制器,它根据布局的结构和各个组件之间的关系,协调各元素的协作运用,使得整个页面看起来更加协调和美观。

CoordinatorLayout 的特点

  • 协调各个组件的位置和大小。
  • 自动根据布局结构协调各个组件在 z 轴方向的位置关系。
  • 支持各种交互行为,如滑动、拖动、折叠等。
  • 可以定制各种 Behaviors,使用 Behavior 可以定制各个子控件的协作方式,比如让一个控件固定在 CoordinatorLayout 上方等。
  • CoordinatorLayout 可以嵌套多层,这样就可以更灵活的协调各个组件的关系。

CoordinatorLayout 常见的 Behaviors

CoordinatorLayout 的 Behaviors 是协调各个子控件的关系的核心手段。在 CoordinatorLayout 中提供了一些默认的 Behaviors,我们可以根据需要进行定制。下面介绍几个比较常用的 Behaviors:

AppBarLayout.Behavior

AppBarLayout 是一个实现了 Toolbar 可以随着滑动向上或向下隐藏的控件,它的默认 Behavior 是 AppBarLayout.Behavior。我们可以通过 AppBarLayout.Behavior 修改 AppBarLayout 的行为,并可以控制其他控件的协调方式。

ScrollingViewBehavior

ScrollingViewBehavior 是用于实现能够滑动的组件的 Behavior,比如 RecyclerView,NestedScrollView 等,它可以协调 ScrollingView 向上滑动时其他控件往下滑动。

FloatingActionButton.Behavior

FloatingActionButton 是一个悬浮在屏幕上方的按钮,用于响应一些重要的用户交互,如范例中的返回顶部按钮。默认情况下,FloatingActionButton 的 Behavior 是 FloatingActionButton.Behavior。我们可以通过 FloatingActionButton.Behavior 修改 FloatingActionButton 的行为。

SwipeDismissBehavior

SwipeDismissBehavior 可以实现可以左右滑动消失的控件,比如卡片式列表中的每一项项目。

CoordinatorLayout 示例代码

下面以一个简单的范例演示 CoordinatorLayout 的使用方法。

布局文件如下:

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

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

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

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

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

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

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

Activity 代码如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

滑动 TabFragment 代码如下:

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

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

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

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

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

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

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

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

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

-
展开代码

实现滑动效果

只要给需要包含在 AppBar 内的 view 设置 layout_scrollFlags 即可实现滑动效果。比如将 Toolbar 设置为滑动对象:

  • enterAlways:向下滑动时,该控件会立即显示出来。
  • scroll:向上滑动时,该控件会滑出屏幕,即隐藏该控件。

结语

本文详细介绍了 CoordinatorLayout 的作用和 Behaviors 的使用方法,并通过一个简单的范例示例了 CoordinatorLayout 的使用。要想用好 CoordinatorLayout,最重要的是要理解各种 Behaviors 的作用,只有掌握了 Behaviors 的使用方法,才能实现好协调各个组件的关系。

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

纠错
反馈

纠错反馈