日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Templates實戰之更優雅實現自定義View構造方法詳解_Android

作者:長安皈故里 ? 更新時間: 2022-10-28 編程語言

問題場景

之前寫過一篇文章: 2.@JvmOverloads快捷實現函數重載, 借助于Kotlin的默認參數+@JvmOverloads簡化自定義View的構造方法編寫:

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

瞧瞧Live Templates

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

像我們常見的logdlogikeyconstvarval等等快速生成模板代碼的指定都是通過Live Templates進行實現的,比如:

logi

key

所以上面一大堆自定義View的構造方法的模板代碼當然也可以使用Live Templates實現。

Live Templates自定義customView指令

  • 指定聲明的指令名稱;
  • 對聲明的指令的功能描述;
  • 自定義View的模板代碼,其中使用$CLASS_NAME$PARENT_CLASS分別代表自定義View的類名和繼承的父類類名,相當于占位符,需要開發者調用該指令時手動編寫指定,這里粘貼一份具體的內容,方便大家復制:
class $CLASS_NAME$ @JvmOverloads constructor(
    context: Context,
    attributes: AttributeSet? = null,
    defStyleAttr: Int = 0
): $PARENT_CLASS$(context, attributes, defStyleAttr) {
}

指定該指令生效的文件范圍,這個不設置指令可能不會生效,比如當前我指定的為kotlin:

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

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

其中兩個紅框中的位置就是上面$CLASS_NAME$PARENT_CLASS分別對應的位置占位符,需要開發者手動編寫實現。

Edit variables進一步優化

如果你感覺使用了customView指令,還需要手動編寫上面兩個紅框中的內容還是太麻煩,那這里我們還可以更進一步優化:

比如第一個紅框中確定要自定義View的類名就是當前文件名,那我們可以把第一個紅框中的內容也交給Live Templates生成,主要就是借助Live Templates中的Edit variables功能

細心的讀者有沒有發現,Live Template功能框中我們還有一個功能沒使用到:

點開看下:

之前講過,CLASS_NAMEPARENT_CLASS就是我們在Template text內容區中設置的兩個變量,分別代表自定義View的類名以及繼承的父類名稱。

CLASS_NAME對應變量如果確定了就是文件名,直接在上面Expression一一覽中指定其生成規則為fileNameWithoutExtension(),這樣輸入customView時,Live Templates就會自動幫助我們將CLASS_NAME變量替換成當前的文件名:

第一個紅框中就是自定生成的類名,我們只需要編寫第二個紅框中需要繼承哪個父類即可。

順便提一句,Edit variables面板中Expression還有很多其他的表達式生成規則:

進一步幫助我們生成模板代碼,提高開發效率,感興趣的可以自行探索。

總結

原文鏈接:https://juejin.cn/post/7138055043076325389

欄目分類
最近更新