Android 之路 (9) - 第一个AS工程代码模板

引言

前面我们在封装Toolbar的时候,使用的是在xml中修改style,其实这种做法在适配会有一点问题,那就是每次我们新建Activity的时候都需要手动的更改 them、style,这比较繁琐、也没什么意义,所以下章我们就着手解决这个问题。

正文

解决方案

解决方案也很简单,就是利用AS自带的工程模板就能够解决这个问题,也就是下面这个东西:

Android 之路 (9) - 第一个AS工程代码模板_第1张图片
工程模板

这个我们用得多,但是真正了解的应该不多,其实他就是使用Freemarker编写模板,然后通过替换输出成为源文件。所以我们只需要修改其中的一部分关键代码替换成自己的就行。

注意:在写本文章的时候用的是 AS 3.14(已经适配3.4),每个版本之间会有细微的差别。

开始

模板位置

windows:

AS安装位置/plugins/android/lib/templates/activities

macOS:

/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities

开始更改

我们以BasicActivity为蓝本,复制一份命名为CandyBaseActivity,然后使用其他编译器打开,我这里使用的是 atom。具体工程模板相关的说明请看AndroidStudio笔记(5)懒人养成的Freemarker代码模板,这里就不仔细讲解了。

我们先整理一下我们需要修改的部分,然后再一步一步的完成:

manifest中的theme
Activity中继承CandyBaseActivity,去除FloatActionButton
activity_layout中修改AppBarLayout和Toolbar、去除FloatActionButton

修改include

Android 之路 (9) - 第一个AS工程代码模板_第2张图片
include

图中的标注出来的地方是manifest和layout.xml的引用,这部分是放在common下面的,是全局配置,我们不好修改, 最好是将这两个文件复制到我们的模板中来,然后修改一下include:

Android 之路 (9) - 第一个AS工程代码模板_第3张图片
修改include

修改manifest

Android 之路 (9) - 第一个AS工程代码模板_第4张图片
manifest-replace

可以看到图中的的指向地址仍是common文件夹,我们需要将这两个文件拷贝到我们的root文件夹下和values文件夹中。

修改AndroidManifest.xml.ftl,将中间的theme修改成我们自己的AppTheme.ToolbarHeight。如下:

<#import "../../common/shared_manifest_macros.ftl" as manifestMacros>


   
           
       

修改SimpleActivity.java.ftl

我们暂时只做Java版本的,对于kotlin先暂时不适配。
去除其中不需要的部分,然后修改继承关系,顺便加一点注释。

package ${packageName};

import android.os.Bundle;
import android.view.View;
import com.td.framework.base.activity.CandyBaseActivity;
<#if applicationPackage??>
import ${applicationPackage}.R;

/**
 * Created on ${.now}
 * @author: aohanyao
 * @version:1.0
 */
public class ${activityClass} extends CandyBaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.${layoutName});
    }
}

修改activity_layout

又是一大堆指向common,不如直接把common下的文件全部copy进来,等做完了再删除无用的文件。

Android 之路 (9) - 第一个AS工程代码模板_第5张图片
activity_layout

把common下的文件全部copy进来
把common下的文件全部copy进来
把common下的文件全部copy进来

重要的事情讲三次。

根据 recipe_app_bar.xml.ftl的指引,需要修改root/res/layout/app_bar.xml.ftl==这个文件。

Android 之路 (9) - 第一个AS工程代码模板_第6张图片
app_bar.xml.ftl

好了,我们对其中的内容进行更改吧。




    

           

               

               
           

       

    



关于string,我们直接AndroidManifest.xml.ftl中的label复制过来就行。

修改 recpie

将模板中的 修改为 ,否则不会生效,还是指向的common

manifest_strings.xml.ftl

现在需要修改 root/res/values/manifest_strings.xml.ftl,先看看内容:


<#if !isNewProject && (generateActivityTitle!true)>
    ${escapeXmlString(activityTitle)}


他这里的做法是通过escapeXmlString方法将activityTitle进行转换

修改template.xml

template.xml是描述输入面板的,这里我们需要修改以下几项,其它暂时默认:

Android 之路 (9) - 第一个AS工程代码模板_第7张图片
模板1

修改之后:

...