Material Design 风格下自定义 BottomNavigationView 控件实现分割线效果

在 Android 应用中,BottomNavigationView 是一个常见的导航栏控件。它可以在底部显示多个导航项,用户可以通过点击不同的项来切换不同的页面。最近,Google 推出了 Material Design 风格的 BottomNavigationView,它具有更加美观和现代的外观,同时也提供了更多的自定义选项。

然而,当我们在使用 Material Design 风格的 BottomNavigationView 时,会发现它默认没有分割线。如果我们想要添加分割线,该怎么办呢?本文将介绍如何自定义 BottomNavigationView 控件实现分割线效果。

实现分割线效果的思路

在实现分割线效果之前,我们需要了解 BottomNavigationView 控件的结构。BottomNavigationView 控件由多个 TabBarItemView 组成,每个 TabBarItemView 包含一个 ImageView 和一个 TextView,用于显示图标和文字。我们可以通过自定义 TabBarItemView 来实现分割线效果。

具体来说,我们需要在 TabBarItemView 的左边和右边分别添加一条分割线,同时需要修改 TabBarItemView 的布局,使得图标和文字居中对齐。下面是实现分割线效果的具体步骤。

  1. 自定义 TabBarItemView

我们可以通过继承 TabBarItemView 类来自定义 TabBarItemView,然后在布局文件中使用自定义的 TabBarItemView。在自定义的 TabBarItemView 中,我们需要添加左右两条分割线,并修改图标和文字的布局。

下面是自定义 TabBarItemView 的代码:

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

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

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

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

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

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

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

        -- ----------
        --- ------- - -------------------------------------------------------------------
        --- -------- - ---------------------------------------------------------------------
        --- -------- - ---------------------------------------------------------------------
        --- ---------- - -----------------------------------------------------------------------
        --------- -------- - --------------
        -------- -------- - --------------
        ---------------------------- -------- -------- ---------
        ------------ ---------- - -------------- ---------------------------
        ---------------- - ---------
        ----------------- - ---------
        ------------------ - ------------------------- - ------------
        -------------------------------------
        ------------------------------------------------ ----------
        ------------ ---------- - -------------- ---------------------------
        -------------------- - -----------
        ------------------ - ------------------------- - ---------------
        -------------------------------------
    -
-
  1. 修改 BottomNavigationView 的布局

在使用自定义的 TabBarItemView 后,我们需要修改 BottomNavigationView 的布局,使得分割线和 TabBarItemView 的宽度一致。具体来说,我们需要在 BottomNavigationView 的布局文件中添加一个 LinearLayout,然后在 LinearLayout 中添加多个自定义的 TabBarItemView,并添加分割线。

下面是修改 BottomNavigationView 布局的代码:

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

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

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

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

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

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

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

在上面的代码中,我们使用了自定义的 CustomTabBarItemView,并添加了左右两条分割线。其中,layout_weight 属性用于设置每个 TabBarItemView 的宽度比例。

  1. 修改 BottomNavigationView 的样式

最后,我们需要修改 BottomNavigationView 的样式,使得它显示自定义的 TabBarItemView。具体来说,我们需要在布局文件中添加以下代码:

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

其中,itemBackground 属性用于设置 TabBarItemView 的背景,itemIconTint 属性用于设置图标的颜色,itemTextAppearance 属性用于设置文字的样式,labelVisibilityMode 属性用于设置文字是否显示。

示例代码

下面是完整的示例代码,包括自定义的 CustomTabBarItemView、BottomNavigationView 的布局文件和样式文件:

  1. CustomTabBarItemView.java
------ ----- -------------------- ------- -------------- -

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

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

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

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

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

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

        -- ----------
        --- ------- - -------------------------------------------------------------------
        --- -------- - ---------------------------------------------------------------------
        --- -------- - ---------------------------------------------------------------------
        --- ---------- - -----------------------------------------------------------------------
        --------- -------- - --------------
        -------- -------- - --------------
        ---------------------------- -------- -------- ---------
        ------------ ---------- - -------------- ---------------------------
        ---------------- - ---------
        ----------------- - ---------
        ------------------ - ------------------------- - ------------
        -------------------------------------
        ------------------------------------------------ ----------
        ------------ ---------- - -------------- ---------------------------
        -------------------- - -----------
        ------------------ - ------------------------- - ---------------
        -------------------------------------
    -
-
  1. activity_main.xml
--------------- ----------------------------------------------------------
    ---------------------------------------------------
    -----------------------------------
    ---------------------------------------------

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

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

-----------------
  1. bottom_navigation_menu.xml
----- -----------------------------------------------------------

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

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

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

-------
  1. tab_bar_item_background.xml
--------- -----------------------------------------------------------

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

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

-----------
  1. tab_bar_item_icon_tint.xml
--------- -----------------------------------------------------------

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

-----------
  1. styles.xml
------ --------------------------- ---------------------------------------------
    ----- --------------------------------------------------------------
--------

总结

本文介绍了如何自定义 BottomNavigationView 控件实现分割线效果。通过自定义 TabBarItemView 和修改 BottomNavigationView 的布局和样式,我们可以轻松地实现分割线效果,并且可以根据自己的需求进行进一步的自定义。希望本文能够对大家有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/660bae00d10417a222bdbd89