Android自定義組件:1、什麼是自定義組件、自定義組件的方式、定義自定義屬性

聲明:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!!

目錄

一、前言

二、什麼是自定義組件

三、自定義組件的方式

1、組合現有組件

2、在某一個組件上進行擴展

3、完全自定義組件

四、定義自定義屬性

1、attrs.xml 文件介紹

2、attrs.xml 文件具體寫法

3、attrs.xml 文件解釋


一、前言

最近項目中用到很多自定義組件的知識,所以想把幾年前自學自定義組件的筆記整理一下和大家一起分享,也方便自己鞏固。之後也會陸續把以前在公司項目當中比較經典的自定義組件案例,抽離出來和大家一起分享

 

二、什麼是自定義組件

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 位或運算

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章