Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解
問題場景
之前寫過一篇文章: 2.@JvmOverloads快捷實(shí)現(xiàn)函數(shù)重載, 借助于Kotlin的默認(rèn)參數(shù)+@JvmOverloads簡化自定義View的構(gòu)造方法編寫:
簡化是簡化了,但是每次寫這么一大堆還是感覺好煩啊,比如忘記AttributeSet
類怎么拼寫的了等等。這就得拿出我們的秘密武器Live Templates
了。
瞧瞧Live Templates
Live Templates
可以簡單理解為實(shí)時(shí)模板,代碼編寫中可以動(dòng)態(tài)根據(jù)輸入的關(guān)鍵字選擇性的插入模板內(nèi)容,比如常見的:
像我們常見的logd
、logi
、key
、const
、var
、val
等等快速生成模板代碼的指定都是通過Live Templates
進(jìn)行實(shí)現(xiàn)的,比如:
logi
key
所以上面一大堆自定義View的構(gòu)造方法的模板代碼當(dāng)然也可以使用Live Templates
實(shí)現(xiàn)。
Live Templates自定義customView指令
- 指定聲明的指令名稱;
- 對聲明的指令的功能描述;
- 自定義View的模板代碼,其中使用
$CLASS_NAME$
、PARENT_CLASS
分別代表自定義View的類名和繼承的父類類名,相當(dāng)于占位符,需要開發(fā)者調(diào)用該指令時(shí)手動(dòng)編寫指定,這里粘貼一份具體的內(nèi)容,方便大家復(fù)制:
class $CLASS_NAME$ @JvmOverloads constructor( context: Context, attributes: AttributeSet? = null, defStyleAttr: Int = 0 ): $PARENT_CLASS$(context, attributes, defStyleAttr) { }
指定該指令生效的文件范圍,這個(gè)不設(shè)置指令可能不會生效,比如當(dāng)前我指定的為kotlin:
經(jīng)過上面的配置customView
指令就生效了,我們看下效果:
當(dāng)從彈出的菜單中點(diǎn)擊該指令時(shí),就會直接生成下面的代碼:
其中兩個(gè)紅框中的位置就是上面$CLASS_NAME$
、PARENT_CLASS
分別對應(yīng)的位置占位符,需要開發(fā)者手動(dòng)編寫實(shí)現(xiàn)。
Edit variables進(jìn)一步優(yōu)化
如果你感覺使用了customView
指令,還需要手動(dòng)編寫上面兩個(gè)紅框中的內(nèi)容還是太麻煩,那這里我們還可以更進(jìn)一步優(yōu)化:
比如第一個(gè)紅框中確定要自定義View的類名就是當(dāng)前文件名,那我們可以把第一個(gè)紅框中的內(nèi)容也交給Live Templates
生成,主要就是借助Live Templates
中的Edit variables
功能
細(xì)心的讀者有沒有發(fā)現(xiàn),Live Template
功能框中我們還有一個(gè)功能沒使用到:
點(diǎn)開看下:
之前講過,CLASS_NAME
和PARENT_CLASS
就是我們在Template text
內(nèi)容區(qū)中設(shè)置的兩個(gè)變量,分別代表自定義View的類名以及繼承的父類名稱。
CLASS_NAME
對應(yīng)變量如果確定了就是文件名,直接在上面Expression
一一覽中指定其生成規(guī)則為fileNameWithoutExtension()
,這樣輸入customView
時(shí),Live Templates
就會自動(dòng)幫助我們將CLASS_NAME
變量替換成當(dāng)前的文件名:
第一個(gè)紅框中就是自定生成的類名,我們只需要編寫第二個(gè)紅框中需要繼承哪個(gè)父類即可。
順便提一句,Edit variables
面板中Expression
還有很多其他的表達(dá)式生成規(guī)則:
進(jìn)一步幫助我們生成模板代碼,提高開發(fā)效率,感興趣的可以自行探索。
總結(jié)
本篇文章主要以自動(dòng)生成自定義View的構(gòu)造方法的模板代碼作為切入點(diǎn),較詳細(xì)介紹了Live Templates
如何自定義指令及使用。當(dāng)然了Live Templates
的使用場景還有好多好多,想要使用Android Studio提高開發(fā)效率的同學(xué)一定需要好好了解一下,更多關(guān)于Templates自定義View構(gòu)造方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android 獲取內(nèi)外SD卡路徑幾種方法總結(jié)
這篇文章主要介紹了Android 獲得內(nèi)外SD卡路徑幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-12-12Android?獲取IP和UA實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了Android?獲取IP和UA實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android實(shí)現(xiàn)自定義倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自定義倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07淺談 Android 7.0 多窗口分屏模式的實(shí)現(xiàn)
這篇文章主要介紹了淺談 Android 7.0 多窗口分屏模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Flutter實(shí)現(xiàn)心動(dòng)的動(dòng)畫特效
為了追求更好的用戶體驗(yàn),有時(shí)候我們需要一個(gè)類似心跳一樣跳動(dòng)著的控件來吸引用戶的注意力。本文將利用Flutter實(shí)現(xiàn)這一動(dòng)畫特效,需要的可以參考一下2022-04-04