[Android]開發(fā)App,你得知道這些7——自定義控件(二)

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.這次的這個標題,可以作為一個模板,以后再要使用類似的標題,可以直接用這次的自定義控件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容