开发工具总结(6)之Android Studio模板配置详解(提高开发效率必备技能)


版权声明:本文为博主原创文章(部分引用他人博文,已加上引用说明),未经博主允许不得转载。https://www.jianshu.com/p/1fe87050c1ff

转载请标明出处:
https://www.jianshu.com/p/1fe87050c1ff
本文出自 AWeiLoveAndroid的博客


2017年最后一天了,首先祝贺大家元旦快乐,2018工作顺利,天天开心。

本文同步发表在github,欢迎观看,guithub地址:https://github.com/AweiLoveAndroid/The-pit-of-the-Android-Studio

【前言】Android Studio模板相信大家应该多少都有接触过吧,如果用的少也没关系,花30分钟看看这篇博客就会用了,我会带领大家快速入门。使用了模板之后能大大的提高开发效率,建议大家收藏本文,忘记的时候再回来看看。

目录

一、工程目录模板
二、Live Templates (活动模板)
三、File and Code Templates(文件和代码模板),这里讲一下自定义注释模板
四、自定义UI模板,新建project或者module的时候,右键可以快速生成模板,比如点击新建Activity,可以选择EmptyActivity等。。


一、工程目录模板

Android Studio 新建一个 project 时并没有将 Android 开发中常用的文件目录全部生成,比如默认只生成了一个 drawable文件夹,常用的 drawable-hdpi等文件夹需要我们自己去创建。再比如values目录下的dimens.xml,res目录下的anim文件夹都是没有的,需要我们手动去创建。这样一来,自己创建浪费时间,同时创建的目录名字错了,编译肯定会报错。所以为了效率和安全起见,我们需要把工程目录模板进行修改,达到创建 project 时就可以生成完整的目录结构,不再手动去创建的目的。

(一)新建module的时候自动生成dimens.xml.
操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule --> root --> res --> values,在values文件夹下创建 dimens.xml 文件夹,写入以下内容,保存:
<?xml version="1.0" encoding="utf-8"?>
<resources>

</resources>
(二)这里有3个需要变更的地方。
  • (1)新建module时,自动添加v4依赖,并且指定v4,v7包依赖版本。
  • (2)新建module时自动生成不同分辨率的drawable文件夹。
  • (3)指定dimens.xml的路径。
操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule,然后用编辑器打开 recipe.xml.ftl文件,并加入以下配置,如下图红色框框所示

说明:

  • (1)dependency 这个意思是配置依赖库的url,默认的只有一个v7包,我这里新增了一个v4包的依赖。

  • (2)v7或者v4后面的25.3.1是对应的版本号,比如你想用24的版本,你可以替换成你的sdk里面对应的版本号(不知道sdk版本号的可以查看 Android studio常用设置和快捷键)。

  • (3)mkdir 意思是创建目录

  • (4)解释一下以下这段代码的意思:

       <instantiate from="root/res/values/dimens.xml"
                 to="${escapeXmlAttribute(resOut)}/values/dimens.xml" />
      //意思是把 模板的root/res/values/demins.xml 这个路径里面的dimens.xml拷贝到创建的项目资源目录下面的values/dimens.xml
    
(三)新建module的时候想让module的build.gradle里面的编译指定某一个版本。比如我想要的结果是这样的:
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        minSdkVersion 25
        targetSdkVersion 25
        ...
    }
    ...
}

重点要设置的有4个:compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion,下面讲一下操作方法:

操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule --> root,然后用编辑器打开build.gradle.ftl,修改配置如下图所示:

说明:先把这个文件备份,再去做修改。免费出问题了还可以还原回来。

4. 新建一个project看看效果如何:

二、Live Templates 活动模板(暂且翻译为 灵活的模板 比较好)

(一)打开方法: 点击菜单File --> 点击Settings --> 选择Editor --> Code Style --> Live Templates,这里面配置了常用代码,比如log,System.out.println,for循环等

由于太多,下面只列举开发中经常用到的:(后面写注释“//修改了快捷键名称” 表示修改了快捷键名称,不再使用默认的快捷键,没修改的是默认的快捷键)

(1)Android 安卓有关的

 const 常量
 fbc findViewById
 fore 创建foreach循环  //修改了快捷键名称
 gone 设置View为gone  //修改了快捷键名称
 IntentView 用ACTION_VIEW创建一个Intent
 key    结果是 private static final String KEY_$value$ = "$value$";
 newInstance 使用参数创建一个新的Fragment实例
 co 生成构造方法  //修改了快捷键名称
 cop 私有构造方法  //修改了快捷键名称
 rgS 从资源文件getString(R.string.XXX)
 rouiT 生成runOnUIThread
 sbc 生成方格状注释代码块
 Sfmt 格式化String String.format(XXX)
 starter 创建一个静态的start(...)方法来启动一个Activity
 toal 创建一个长时间的Toast  //新增
 toas 创建一个Toast  //修改了快捷键名称
 vi 设置View为visible  //修改了快捷键名称

(2)AndroidComments 安卓组件

fix    添加 // FIXME    //修改了快捷键名称
do    添加 // TODO      //修改了快捷键名称

(3)AndroidLog 安卓打log有关的

logd  Log.d(TAG, String)
loge  Log.e(TAG, String)
logi  Log.i(TAG, String)
logm  打印方法名称及其参数,Log.d(TAG,XXX)
logr  打印方法的结果

tag  根据当前的类名生成一个静态logtag  //修改了快捷键名称,修改了内容,描述改为“根据当前类生成一个TAG”
private static final String TAG = $className$.class.getSimpleName();

logw  Log.w(TAG,String,Exception)
logf  Log.wtf(TAG, String, Exception)  //修改了快捷键名称

(4)iterations 快速生成循环和迭代器代码块

for 示例:for (int i = 0; i < ; i++) {}  //修改了快捷键名称

fora 示例:遍历数组  //修改了快捷键名称
for (int i = 0; i < Array.length; i++) {
    int i1 = Array[i];
}

forc 示例:使用iterator遍历一个容器变量  //修改了快捷键名称
for (Iterator iterator = collection.iterator(); iterator.hasNext(); ) {
    Object next = iterator.next();
}//这个是遍历一个容器变量的,直接让容器返回一个iterator进行遍历

whe 示例:while循环遍历枚举内容  //修改了快捷键名称
while (枚举类.hasMoreElements()) {
    Object nextElement = 枚举类.nextElement();
}

iter 示例:遍历选中状态下的set  //修改了快捷键名称
for (int i : FOCUSED_STATE_SET) {...}

whi 示例:while循环使用iterator进行遍历  //修改了快捷键名称
while (iterator.hasNext()) {
    Object next = iterator.next();
}//获取到了迭代器对象后,对迭代器进行遍历操作

forl 示例:遍历list对象里面的内容  //修改了快捷键名称
for (int i = 0; i < list.size(); i++) {
    Object o = list.get(i);
}

foraa 示例:倒叙遍历数组  //修改了快捷键名称
for (int i = Array.length - 1; i >= 0; i--) {
    int i1 = FOCUSED_STATE_SET[i];
}

//以下这两个用的少,只是把快捷键改了一下,方便使用
fors 对StringTokenizer遍历  //修改了快捷键名称
forv 对Vector遍历  //修改了快捷键名称

(5)Other 其他的

geti 获取到当前的实例 示例:
public static MainActivity getInstance() {
    return ;
}

ifn 生成if null代码块 示例: if (某变量 == null) {....}
inn 生成if not null代码块 示例:if (某变量 != null) {....}

inst 判断某变量是不是某个类的实例对象 示例:
if ($EXPR$ instanceof $TYPE$) {
    $TYPE$ $VAR1$ = ($TYPE$)$EXPR$; $END$
}

lazy 执行延迟初始化,就是对象直到用的时候才进行初始化操作 示例:
if (savedInstanceState == null) {
    savedInstanceState = new Bundle();
}

st 获取数组最后一个元素 示例: arr[arr.length - 1]
mn 比较两个变量较小值 Math.min(var2,var3);
mx 比较两个变量较大值 Math.max(var2,var3);

main 生成一个main()函数的代码块
public static void main(String[] args){ 。。。。 }  //修改了快捷键名称

toar 把collection的对象存储到一个数组里面 示例:something.toArray(new collection[something.size()])

(6)plain 关于修饰符

psf     public static final 
psfi    public static final int 
psfs    public static final String 
St      String 
thr     throw new 

(7)surround 代码块被什么包裹。。

I 被迭代器包裹 默认的是:
for (Object o :) {

}

(8)output(我改成了SystemOut) //修改了组的名称

sysr 示例: System.err.println("example")  //修改了快捷键名称
sysf 示例: System.out.printf("example")  //修改了快捷键名称
syso 示例: System.out.println("example")  //修改了快捷键名称
sysom 打印当前类的当前方法名, 示例:System.out.println("MainActivity.onCreate");  //修改了快捷键名称

sysop 打印当前方法的所有参数列表及其值, 示例:
System.out.println("savedInstanceState = [" + savedInstanceState + "]");  //修改了快捷键名称

sysov 打印一个变量值, 示例:System.out.println("arr = "+ arr);  //修改了快捷键名称
(二)自定义活动模板

我自定义了几个常用功能,放在lzw组下面,如图所示:

han: 自动生成一个类继承Handler
swi  自定义switch/case选择语句
toli 把数组转成集合(自定义的,后面会讲解怎么自定义的)
zs:注释模板
具体操作方式如下:

(1)点击右边的“+” 加号,选择 Template Group,创建一个组,输入一个组名,点OK

(2)找到刚创建的组,点击右边的“+” 加号,选择 Live Template,创建一个模板

(3)Abbreviation后面的输入框输入一个快捷键名称,Description后面的输入框输入描述

(4)点击下方的Define,勾选java前面的复选框

(5)Template text 输入自定义模板的代码内容

(6)点击右边的Edit variables,编辑指定的变量名

具体如下图所示:

三、File and Code Templates 文件和代码模板,这里讲一下自定义注释模板

(一) 类注释

从编程规范来讲:编写完成每个类都要有一个头部注释,标注类的功能描述,作者,联系方式和修改日期等。对自己的代码负责。

头部注释的添加有以下两种方式:

(1)第一种方式,可以在AS中,Settings → Editor → File and Code Templates → Includes → File Header,输入:

 /**
  * 描述:添加类的描述
  * @author yourName
  * @e-mail XXX@XX.com
  * @time   ${DATE}
  */
这样便可在每次新建类的时候自动加上该头注释,如下图所示:

(2)第二种方式,在Settings → Editor → Live Templates中配置,如下图所示:

关于这里的DATE ,点击右边的Edit variables,属性配置成date()

这种方式是配置模板和对应的快捷键,比如我的配置完成后在类的开头输入 lzw 回车就会自动生成对应的注释模板:

(二) 方法注释

每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释。

操作方式:在方法前一行输入 /** + 回车 或者设置 Fix doc comment(Settings → Keymap → Fix doc comment) 快捷键,AS便会帮你生成模板,我们只需要补全参数即可。

四、自定义UI模板,新建project或者module的时候,右键可以快速生成模板,比如点击新建Activity,可以选择EmptyActivity等。。

【说明】这个我也没做太多研究,以后有时间我研究一下,把它写到这篇博客里面来。有兴趣的的可以参考这篇文章 AndroidStudioTemplate。该文章对应的github地址是: AndroidStudioTemplate

另外:我看简书里面也有前辈写了相关文章,也可以去看看。
《android studio的自定义工程模板详解》 https://www.jianshu.com/p/c76facb61d69
《网易 Android 工程模板化实践》https://www.jianshu.com/p/4076b71f18a4


本文同步发表在github,欢迎观看,guithub地址:https://github.com/AweiLoveAndroid/The-pit-of-the-Android-Studio

到此为止,Android Studio的模板配置基本讲完了,有疑问的欢迎在下面留言。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容