基于 Material Design 风格的 SearchView 自定义控件

阅读时长 10 min read

搜索功能在用户使用体验上是非常重要的,让用户能够快速地找到自己需要的内容。基于 Material Design 风格的 SearchView 自定义控件可以提供给用户更加美观、友好的搜索体验。在本文中,我们将详细介绍如何使用 Material Design 风格的 SearchView 自定义控件。

Material Design 简介

Material Design 是 Google 在 Android 5.0 系统中推出的一种全新设计语言,旨在打造出更加美观、自然且具有层次感的用户界面。Material Design 的设计理念借鉴了现实世界的虚实交互特点,同时采用了平面化设计风格、具有光影效果的立体感,使得整个界面更加生动丰富,注重多元素之间的视觉和空间关系。

SearchView 控件简介

SearchView 控件是为 Android 系统提供的一个搜索框控件,通常情况下,在 ActionBar 中是通过点击搜索图标打开,默认情况下,搜索图标会右对齐。

SearchView 控件的局限性

默认情况下,SearchView 的样式比较简单,且不具有美观感,不能很好地满足 Material Design 的设计标准。在满足实用功能的同时,我们也要注重 UI 设计。

下面,我们来介绍如何基于 Material Design 风格的 SearchView 自定义控件。我们将会实现如下图所示的效果。

可以发现,我们设计的 SearchView 自定义控件具有以下特点:

  1. 界面风格统一
  2. 输入框背景颜色美观
  3. 动态图标

自定义控件代码实现

首先,在项目中创建一个名称为 MaterialDesignSearchView.kt 文件。

布局文件

res/layout 目录下,新建一个布局文件 material_design_searchview.xml,代码如下:

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

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

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

这里我们使用了 TextInputLayoutTextInputEditText,分别用于控制背景颜色、图标和输入框的样式。

自定义控件类

接着我们创建 MaterialDesignSearchView.kt 类文件,并将自定义控件的代码实现如下:

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

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

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

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

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

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

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

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

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

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

-
  • MaterialDesignSearchView 类继承自 TextInputLayout,实现了 TextInputLayout 的全部功能,增加了自定义控件特色的代码。
  • initView() 方法在初始化控件时,设置 isHintEnabledfalse,从而屏蔽了默认的提示文字。
  • 增加了 handleFocusChanged() 方法,用于处理焦点变化事件,当输入框失去焦点时,隐藏控件。
  • 使用 setTextColor() 方法设置输入框内文字颜色,使用 setHintTextColor() 方法设置提示文字颜色。
  • 使用 endIconModeendIconDrawable 属性设置动态图标,使用 boxBackgroundColor 设置输入框背景颜色。

自定义控件使用

接下来,我们在项目中使用自定义控件。

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

在项目布局文件中,我们将自定义控件作为一个 View 使用,并赋予一定的宽高约束条件。

通过 app:endIconDrawable 属性设置动态图标,使用 app:hintTextColor 设置提示文字颜色。

在 Activity 中使用自定义控件,示例代码如下:

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

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

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

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

在 Activity 中,我们通过 findViewById() 方法绑定视图控件,并使用 setHint() 方法设置输入提示文字和颜色。

结语

本文主要介绍了如何基于 Material Design 风格开发 SearchView 自定义控件。通过这个例子,我们了解到如何实现自定义控件,并且学习了如何使用 Material Design 风格制定界面元素。希望读者们能够通过本文,对 Android 自定义控件功能有所了解,更好地应用到实际开发当中。

Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6794e09f504e4ea9bd9bf4c4

Feed
back