聲明:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!!
目錄
一、前言
最近項目中用到很多自定義組件的知識,所以想把幾年前自學自定義組件的筆記整理一下和大家一起分享,也方便自己鞏固。之後也會陸續把以前在公司項目當中比較經典的自定義組件案例,抽離出來和大家一起分享
二、什麼是自定義組件
Android爲我們提供了豐富的 UI組件,基本的應用已經足夠了,但在實際開發中,如果我們想構建更加複雜的 UI視圖,此時就需要使用自定義組件了。
三、自定義組件的方式
自定義組件的三種方式:
1、組合現有組件
組合現有Android默認提供的組件,繼承ViewGroup或其子Layout類等佈局類進行組合。
如:如果是我們自己寫Layout佈局,每次可能要一個個寫或拖動進去。
那我們把這整個Layout佈局定義成一個組件,下次就直接使用即可,相當於打包。
2、在某一個組件上進行擴展
調整現有Android默認提供的組件,繼承View的子類具體類。
如:繼承ImageView實現在圖片上添加文字,繼承Toast實現在文字下面添加圖片等
3、完全自定義組件
繼承View基類,裏面界面及事件完全由自己控制。
如:我們知道所有組件都是繼承View而來,那麼你也就可以直接自己寫一個類繼承View,重寫View裏面的相關方法或事件,然後自己去控制操作。 這個是最原始的,完全自定義的,不是基於任何Android默認提供的組件去定義的。
四、定義自定義屬性
1、attrs.xml 文件介紹
不管使用哪種自定義組件的方式,首先當然是你要寫出自定義組件的一個類文件,
在這個類當中,如果你需要有自定義的屬性。
所謂自定義屬性是什麼?
如:像android提供的默認組件,一般都有定義寬、高、字體大小或顏色的屬性,
如果除了這些屬性以外,還想在你的自定義組件裏面,擁有提供自己的屬性,這個就是自定義屬性。
如何創建自定義屬性文件?
這個時候我們就要使用到一個屬性資源配置文件,它是一個xml文件,
然後將這個類裏,需要外界傳入值的屬性,定義在這個屬性資源配置文件中,
在工程裏的 .../res/values/ 目錄下創建一個 attrs.xml,
文件名 attrs由英文單詞 attribute而來,見名知意的寫法,
文件名並不是只能寫成這樣,這樣寫只有一個目的,別人一看就知道這個文件是屬性資源文件了。
2、attrs.xml 文件具體寫法
配置XML屬性資源文件的方式,attrs.xml 文件 具體寫法如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="textColor" format="color"/>
<attr name="textSize" format="dimension"/>
<attr name="text" format="string"/>
</declare-styleable>
</resources>
3、attrs.xml 文件解釋
attrs.xml文件解釋如下:
attrs.xml文件解釋如下
resources 資源
declare-styleable 聲明風格樣式 name 風格樣式的名稱
attrs 子元素
name 屬性名
format 屬性格式
定義具體的屬性,format 表示這個屬性的值的類型,類型有以下幾種:
1、reference
參考指定Theme中資源ID,這個類型的意思,就是你傳的值可以是引用資源
2、string 字符串,
如果你想別人既能直接寫字符串值,也可以用類似寫"@string/test"引用資源的方式,可以寫成 format="string|reference"
3、color 顏色
4、boolean 布爾值
5、dimension 尺寸值
6、float 浮點型
7、integer 整型
8、fraction 百分數
9、enum 枚舉。只能在提供的值裏面選一個,如下:
<attr name="language">
<enum name="China" value="1">
<enum name="English" value="2">
</attr>
10、flag 位或運算