Templates实战之更优雅实现自定义View构造方法详解

作者:长安皈故里 时间:2021-12-22 13:22:40 

问题场景

之前写过一篇文章: 2.@JvmOverloads快捷实现函数重载, 借助于Kotlin的默认参数+@JvmOverloads简化自定义View的构造方法编写:

Templates实战之更优雅实现自定义View构造方法详解

简化是简化了,但是每次写这么一大堆还是感觉好烦啊,比如忘记AttributeSet类怎么拼写的了等等。这就得拿出我们的秘密武器Live Templates了。

瞧瞧Live Templates

Templates实战之更优雅实现自定义View构造方法详解

Live Templates可以简单理解为实时模板,代码编写中可以动态根据输入的关键字选择性的插入模板内容,比如常见的:

Templates实战之更优雅实现自定义View构造方法详解

像我们常见的logdlogikeyconstvarval等等快速生成模板代码的指定都是通过Live Templates进行实现的,比如:

logi

Templates实战之更优雅实现自定义View构造方法详解

key

Templates实战之更优雅实现自定义View构造方法详解

所以上面一大堆自定义View的构造方法的模板代码当然也可以使用Live Templates实现。

Live Templates自定义customView指令

Templates实战之更优雅实现自定义View构造方法详解

  • 指定声明的指令名称;

  • 对声明的指令的功能描述;

  • 自定义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:

Templates实战之更优雅实现自定义View构造方法详解

经过上面的配置customView指令就生效了,我们看下效果:

Templates实战之更优雅实现自定义View构造方法详解

当从弹出的菜单中点击该指令时,就会直接生成下面的代码:

Templates实战之更优雅实现自定义View构造方法详解

其中两个红框中的位置就是上面$CLASS_NAME$PARENT_CLASS分别对应的位置占位符,需要开发者手动编写实现。

Edit variables进一步优化

如果你感觉使用了customView指令,还需要手动编写上面两个红框中的内容还是太麻烦,那这里我们还可以更进一步优化:

比如第一个红框中确定要自定义View的类名就是当前文件名,那我们可以把第一个红框中的内容也交给Live Templates生成,主要就是借助Live Templates中的Edit variables功能

细心的读者有没有发现,Live Template功能框中我们还有一个功能没使用到:

Templates实战之更优雅实现自定义View构造方法详解

点开看下:

Templates实战之更优雅实现自定义View构造方法详解

之前讲过,CLASS_NAMEPARENT_CLASS就是我们在Template text内容区中设置的两个变量,分别代表自定义View的类名以及继承的父类名称。

CLASS_NAME对应变量如果确定了就是文件名,直接在上面Expression一一览中指定其生成规则为fileNameWithoutExtension(),这样输入customView时,Live Templates就会自动帮助我们将CLASS_NAME变量替换成当前的文件名:

Templates实战之更优雅实现自定义View构造方法详解

第一个红框中就是自定生成的类名,我们只需要编写第二个红框中需要继承哪个父类即可。

顺便提一句,Edit variables面板中Expression还有很多其他的表达式生成规则:

Templates实战之更优雅实现自定义View构造方法详解

进一步帮助我们生成模板代码,提高开发效率,感兴趣的可以自行探索。

来源:https://juejin.cn/post/7138055043076325389

标签:Templates,自定义,View,构造方法
0
投稿

猜你喜欢

  • Java精品项目瑞吉外卖之员工信息管理篇

    2023-07-29 07:43:36
  • 使用Springboot 打jar包实现分离依赖lib和配置

    2023-01-29 18:35:29
  • Java输入输出流的使用详细介绍

    2023-08-01 22:21:22
  • mybatis plus使用redis作为二级缓存的方法

    2023-11-19 08:34:58
  • Java基于余弦方法实现的计算相似度算法示例

    2022-06-29 22:02:13
  • Java 关于递归的调用机制精细解读

    2023-01-17 04:42:41
  • SpringBoot 过滤器与拦截器实例演示

    2021-08-26 08:33:23
  • spring cloud oauth2 feign 遇到的坑及解决

    2022-06-15 13:06:06
  • Springboot集成RabbitMQ死信队列的实现

    2022-08-24 13:10:54
  • java Long类型转为String类型的两种方式及区别说明

    2022-11-12 18:03:38
  • Java如何使用httpclient检测url状态及链接是否能打开

    2022-07-03 21:23:25
  • java基础(System.err和System.out)详解

    2022-10-23 23:27:37
  • 深入解析Jdk8中Stream流的使用让你脱离for循环

    2023-03-01 21:50:43
  • Flutter利用Hero组件实现自定义路径效果的动画

    2023-06-25 13:46:29
  • SpringMVC @RequestBody的使用解析

    2022-01-30 06:34:32
  • 重写hashCode()和equals()方法详细介绍

    2023-11-24 16:13:33
  • springmvc不进入Controller导致404的问题

    2023-03-18 01:29:20
  • Spring Batch入门教程篇

    2022-02-15 01:53:01
  • Java多线程通信:交替打印ABAB实例

    2022-04-08 06:57:28
  • Spring Security添加验证码的两种方式小结

    2021-08-05 17:24:25
  • asp之家 软件编程 m.aspxhome.com