0.前言
本文為上一篇文章的續(xù)篇,主要是內(nèi)容過長,為了便于觀看,分成了兩篇文章
建議想系統(tǒng)學習的讀者,先閱讀上一篇文章:
[Android]開發(fā)App,你得知道這些6——自定義控件(一)準備工作
在讀本文前,你最好有以下準備:
- (1)安裝Android Stuido(以下簡稱AS)
- (2)有一定的Java基礎(chǔ)
- (3)有一臺安卓機
(可以用模擬器來代替,包括AS自帶的以及網(wǎng)上的一些著名模擬器)- 若想要了解有關(guān)Java的文章等其他主要知識,可以去看前面的文章
(不會使用AS的讀者可以參考下面這篇文章中的例子)
《[Java]開發(fā)安卓,你得掌握的Java知識2》

1.本文內(nèi)容簡介
-
繼承方式自定義控件(xml方式)
繼承方式的控件
xml文件
第零步 建議先完成java代碼方式的自定義控件方式
這里會簡略地說一下,首先,準備好drawable資源,在MainActivity同一個文件夾下,創(chuàng)建一個類,繼承一個Layout(本文繼承的是RelativeLayout)取名為Title,然后ctrl+0(選擇重寫的函數(shù)),選擇前三個函數(shù)
- 如果想要觀看詳細過程的,去看:
[Android]開發(fā)App,你得知道這些6——自定義控件(一)
這里不再贅述
xml用到的是后面兩個構(gòu)造方法
一般情況下我們?yōu)榱藢懘a方便,會把第二個代碼中的內(nèi)容,改成this(context,attrs,0)
這樣的話,無論有沒有defStyleAttr,都會走最后一個構(gòu)造方法,避免代碼冗余

第一步 創(chuàng)建一個values的xml文件
找到res->values
右鍵->New->Values resource file
起名字(其他不用動)

第二步 完成xml設(shè)置
輸入"<decl",出現(xiàn)提示回車即可
name選擇你要通過xml方式自定義的控件的類
此時直接輸入">"可以補全
在<declare-styleable>標簽里面添加對應的屬性
- 這里的name表示參數(shù)名,就是xml添加控件的時候,可以設(shè)置的參數(shù)
- format表示屬性的數(shù)據(jù)類型,如果有多種可能,用"|"隔開(如backgroundRes)
- 另外,這些參數(shù)的來源,可以參考java代碼方法添加控件的時候,所需要的參數(shù),因此這就是最好先要弄好java代碼方式的原因(需要的去看上一篇文章)
最后可以實現(xiàn)xml里面這么添加(現(xiàn)在還不行)
代碼:(用來復制)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Title">
<attr name="titleString" format="string"/>
<attr name="rightBtnString" format="string"/>
<attr name="hasReturnBtn" format="boolean"/>
<attr name="backgroundRes" format="integer|reference|color"/>
</declare-styleable>
</resources>

第三步 在Title類的第三個中獲取設(shè)置的屬性
(后面會給全代碼的)
- 這里的if(attrs != null)用來判斷是否有設(shè)置屬性(如果有,則attrs不會是null)
而TypeArray用來獲取設(shè)置的屬性所組成的數(shù)組
先在外面聲明好變量
然后在下面獲取
最后通過之前java代碼創(chuàng)建的時候使用的方法,對屬性進行賦值(這些方法上一篇文章有)

第四步 在activity_main.xml中添加控件
選擇第一個即可
設(shè)置對應的屬性
效果:

總結(jié)
1.這次的兩篇文章講了自定義控件中的組合方式創(chuàng)建,由于使用的是系統(tǒng)自帶的控件,因此其實更多的是考驗編寫者的邏輯思維
2.兩篇文章中的代碼書寫邏輯我略微省去了一些(篇幅有限),如果有一定基礎(chǔ),其實并不難看懂
3.這次的這個標題,可以作為一個模板,以后再要使用類似的標題,可以直接用這次的自定義控件



















