Templates實戰(zhàn)之更優(yōu)雅實現(xiàn)自定義View構造方法詳解
問題場景
之前寫過一篇文章: 2.@JvmOverloads快捷實現(xiàn)函數(shù)重載, 借助于Kotlin的默認參數(shù)+@JvmOverloads簡化自定義View的構造方法編寫:

簡化是簡化了,但是每次寫這么一大堆還是感覺好煩啊,比如忘記AttributeSet類怎么拼寫的了等等。這就得拿出我們的秘密武器Live Templates了。
瞧瞧Live Templates

Live Templates可以簡單理解為實時模板,代碼編寫中可以動態(tài)根據(jù)輸入的關鍵字選擇性的插入模板內容,比如常見的:

像我們常見的logd、logi、key、const、var、val等等快速生成模板代碼的指定都是通過Live Templates進行實現(xiàn)的,比如:
logi

key

所以上面一大堆自定義View的構造方法的模板代碼當然也可以使用Live Templates實現(xiàn)。
Live Templates自定義customView指令

- 指定聲明的指令名稱;
- 對聲明的指令的功能描述;
- 自定義View的模板代碼,其中使用
$CLASS_NAME$、PARENT_CLASS分別代表自定義View的類名和繼承的父類類名,相當于占位符,需要開發(fā)者調用該指令時手動編寫指定,這里粘貼一份具體的內容,方便大家復制:
class $CLASS_NAME$ @JvmOverloads constructor(
context: Context,
attributes: AttributeSet? = null,
defStyleAttr: Int = 0
): $PARENT_CLASS$(context, attributes, defStyleAttr) {
}
指定該指令生效的文件范圍,這個不設置指令可能不會生效,比如當前我指定的為kotlin:

經過上面的配置customView指令就生效了,我們看下效果:

當從彈出的菜單中點擊該指令時,就會直接生成下面的代碼:

其中兩個紅框中的位置就是上面$CLASS_NAME$、PARENT_CLASS分別對應的位置占位符,需要開發(fā)者手動編寫實現(xiàn)。
Edit variables進一步優(yōu)化
如果你感覺使用了customView指令,還需要手動編寫上面兩個紅框中的內容還是太麻煩,那這里我們還可以更進一步優(yōu)化:
比如第一個紅框中確定要自定義View的類名就是當前文件名,那我們可以把第一個紅框中的內容也交給Live Templates生成,主要就是借助Live Templates中的Edit variables功能
細心的讀者有沒有發(fā)現(xiàn),Live Template功能框中我們還有一個功能沒使用到:

點開看下:

之前講過,CLASS_NAME和PARENT_CLASS就是我們在Template text內容區(qū)中設置的兩個變量,分別代表自定義View的類名以及繼承的父類名稱。
CLASS_NAME對應變量如果確定了就是文件名,直接在上面Expression一一覽中指定其生成規(guī)則為fileNameWithoutExtension(),這樣輸入customView時,Live Templates就會自動幫助我們將CLASS_NAME變量替換成當前的文件名:

第一個紅框中就是自定生成的類名,我們只需要編寫第二個紅框中需要繼承哪個父類即可。
順便提一句,Edit variables面板中Expression還有很多其他的表達式生成規(guī)則:

進一步幫助我們生成模板代碼,提高開發(fā)效率,感興趣的可以自行探索。
總結
本篇文章主要以自動生成自定義View的構造方法的模板代碼作為切入點,較詳細介紹了Live Templates如何自定義指令及使用。當然了Live Templates的使用場景還有好多好多,想要使用Android Studio提高開發(fā)效率的同學一定需要好好了解一下,更多關于Templates自定義View構造方法的資料請關注腳本之家其它相關文章!
相關文章
全面解析Android應用開發(fā)中Activity類的用法
這篇文章主要介紹了Android應用開發(fā)中Activity類的用法,包括Activity間的數(shù)據(jù)傳遞以及Activity的創(chuàng)建方式等,需要的朋友可以參考下2016-02-02
Gradle?Build?Cache引發(fā)的Task緩存編譯問題
這篇文章主要為大家介紹了Gradle?Build?Cache引發(fā)的Task緩存編譯問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

