一文完全瞭解Android自定義控件(四)

Android自定控件的步驟

爲何自定義控件要步驟化呢?由於不少新手同窗,根據產品的要求作一些控件時,無從下手。android

有了步驟之後,就能夠按套路走了,不再用懼怕了。markdown

判斷控件類型

首先咱們要判斷這個控件是屬於自定義控件裏的哪一種類型,若是不知道分類的話,同窗們能夠看這篇文章自定義控件分類app

獲取相關的屬性

其實這玩意在自定義控件裏叫自定義屬性。什麼是屬性呢?佈局

來咱們看,android控件原有的屬性:spa

好比說咱們的LinearLayoutcode

<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="41px" android:orientation="horizontal">
</LinearLayout>
複製代碼

這裏面的屬性就有origintation,layout_width,layout_height.... 而origintation是LinearLayout特有的,而其餘的則是View都有的orm

那麼咱們在寫本身的控件時,有些值,也是經過xml裏的屬性進行配置的,因此咱們要有自定義屬性。xml

自定義控件裏如何自定義屬性呢?utf-8

自定義屬性步驟:資源

  1. 聲明屬性

resvalues目錄下的attrs.xml文件中(沒有就本身新建一個),使用declare-styleable標籤自定義屬性。

在attrs.xml裏進行聲明,其實都行,都是resourse,舉例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--屬性集合-->
    <declare-styleable name="SearchView" >
        <!--hint-->
        <attr name="hint" format="string"/>
        <!--搜索圖標 能夠經過typedArray.getResourceId獲取資源id-->
        <attr name="search_ico" format="reference" />
        <!--清空圖標-->
        <attr name="clear_ico" format="reference" />
        <!--語音圖標-->
        <attr name="voice_ico" format="reference" />
        <!--輸入類型-->
        <attr name="input_type">
            <!--value值只能是int類型的 因此獲取時經過typeArray.getInt獲取-->
            <enum name="text" value="0"/>
            <enum name="passwordText" value="1"/>
        </attr>

        <attr name="gravity">
            <!--區別於enum enum只能選擇一個 flag能夠多選 如:left|top-->
            <flag name="left" value="0" />
            <flag name="top" value="1" />
            <flag name="center" value="2" />
            <flag name="right" value="3" />
            <flag name="bottom" value="4" />
        </attr>
    </declare-styleable>

</resources>
複製代碼

其中declare-styleable標籤表明一個屬性集合,name屬性要與自定義的控件同名attr則是每條屬性了,name是屬性值,format是指定屬性類型,目前可支持11種類型:

  • reference:引用資源

  • string:字符串

  • Color:顏色

  • boolean:布爾值

  • dimension:尺寸值

  • float:浮點型

  • integer:整型

  • fraction:百分數

  • enum:枚舉類型

  • flag:位或運算

  1. 佈局文件中使用

首先須要加上一個命名空間xmlns:app="http://schemas.android.com/apk/res-auto" 而後直接利用這個命名空間設置屬性便可

<com.searchview.SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" app:hint="aaa" app:search_ico="@drawable/ic_search" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
複製代碼

測量

測量是重點要掌握的,若是是ViewGroup則測量本身(設置本身大小,由於ViewGroup也能夠是子view呀)跟設置指望孩子的大小。

若是是View則須要測量本身(設置本身大小)

這兩個參數要理解

自定義控件的本質

相關文章
相關標籤/搜索