android studio 自定义开发模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31796651/article/details/89182790

先看效果图:演示模板是根据我的项目来的,所以模板中引入了基础类,创建一个直接生成对应的四个类,只为了显示效果;

            

先看张图,看到Empty Activity是不是很熟悉呢,但是细心的伙伴也看到了下面有我创建的MVP Activity模板,那我们就来看看这些模板都是在哪里呢?

下来上干货:

mac电脑:

mac电脑应用程序/Android Studio.app/右击选择“显示包内容” /plugins/android/lib/templates/activities

或者在桌面点击“前往”==》然后选择“前往文件夹” ===》在出现的弹窗中输入地址:

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

windows电脑:

在 android studio 安装目录下plugins/android/lib/templates/activities

1、打开后可以看到如下图,我们看到了Empty Activity,这里用Empty Activity举例主要是它内部简单

2、打开EmptyActivity我们可以看到以下文件,下来我们分析下面几个文件:主要需要看recipe.xml.ftl、template.xml、app_package文件夹中,globals.xml.ftl文件即使自定义也不需要改动;

recipe.xml.ftl文件主要将app_package文件夹中模板类进行复制创建到指定的路径下;

2.1、template.xml文件用一张图说明下,可以看到可以自定义界面的样式

 id :唯一标识,最终会通过它获取字符串
 name:界面上的左边的提示语
 type : 输入值类型  可以是string int boolean 等等
 constraints:填写值的约束 如noneempty
 default:默认值 如
 help:显示的帮助提升语,点击后会显示提示语

注意:修改后双引号有可能会变为中文的“,需要手动修改为英文的双引号",虽然不报错,但是后面根据模板不能创建;

2.2、打开recipe.xml.ftl如下代码,解说在代码中写吧,里面引用了模板common中的配置,千万不要改common中的东西;

<?xml version="1.0"?>
<#import "root://activities/common/kotlin_macros.ftl" as kt>
<recipe>
<!--此处根据common中的recipe_manifest.xml将新建的Activity配置AndroidManefist.xml文件中-->
    <#include "../common/recipe_manifest.xml.ftl" />
    <@kt.addAllKotlinDependencies />

<#if generateLayout>
<!--此处根据common中的recipe_simple.xml.ftl创建新的xml布局文件-->
    <#include "../common/recipe_simple.xml.ftl" />
    <open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
</#if>
<!--这个就是将 app_package文件夹下的SimpleActivity.java.ftl类复制到输出文件夹创建新的类(这里默认是包名路径下),多个instantiate标签就可以多创建几个类-->
    <instantiate from="root/src/app_package/SimpleActivity.${ktOrJavaExt}.ftl"
                   to="${escapeXmlAttribute(srcOut)}/${activityClass}.${ktOrJavaExt}" />
<!--在代码生成后,打开指定的文件,比如我们新建一个Activity后,默认就会将该Activity打开-->
    <open file="${escapeXmlAttribute(srcOut)}/${activityClass}.${ktOrJavaExt}" />

</recipe>

2.3、app_package文件夹中的模板类,这里不用EmptyActiviy的说明了,一般自定义模板只针对相同项目架构和特定的功能,要想通用限制太多,还不如直接使用EmptyActiviy就没必要再自定义了;下面是我根据我的项目自定义的模板Activity,你可以参考然后根据你的项目架构进行自定义,有些代码是可以写死只针对你当前的项目,可以简化很多。

package ${packageName}.act;

import ${superClassFqcn};
import android.os.Bundle;
//这两个根据包名引入了相对路径下的对应类
import ${packageName}.contract.${activityClass}Contract;
import ${packageName}.presenter.${activityClass}Presenter;
//这里我直接引入了绝对路径
import com.snow.master.common.base.BaseActivity;
<#if (includeCppSupport!false) && generateLayout>
</#if>
/**
 * author : ${author}//这里获取的2.1中自定义的作者名
 * date   : ${.now?string("yyyy/MM/dd")}//这个就不需要修改了,是获取当前的时间
 * desc   :说明下,想获取2.1中定义的值,可以通过${id名},下面相对简单就不做注释了
 */
public class ${activityClass}Act extends BaseActivity implements ${activityClass}Contract.V{

    private ${activityClass}Presenter mPresenter;
 @Override
    protected int getContentViewId() {
        return R.layout.${layoutName};
    }
    @Override
    protected void firstInitView() {
	mPresenter = new ${activityClass}Presenter(this, this);
    }	
    @Override
    protected void secondInitData() {

    }

    @Override
    public void getInfoSuccess(JsonObject rootJson) {

    }
<#include "../../../../common/jni_code_snippet.java.ftl">
}
package ${packageName}.presenter;

import ${packageName}.contract.${activityClass}Contract;
import com.changdao.master.appcommon.https.BasePresenter;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;

/**
 * author : ${author}
 * date   : ${.now?string("yyyy/MM/dd")}
 * desc   :这是我的项目的Presenter,可以做个参考
 */
public class ${activityClass}Presenter extends BasePresenter<${activityClass}Contract.V> implements ${activityClass}Contract.P {

    public ${activityClass}Presenter(${activityClass}Contract.V mView,  RxAppCompatActivity mActivity) {
	super(mView, mActivity);

    }
@Override
    public void getInfoData() {

    }
}

最后提醒下:

1、自定义模板时,将EmptyActivity模板复制一份名字随你喜欢随便起,不要再原模板修改。

2、可以多看看下common模板,因为很多其他模板都是引用common模板的,细细研究可以作出更好的自定义模板,千万别随便修改common模板中的文件

参考:

https://www.jianshu.com/p/a5f748e2e856

https://blog.csdn.net/u012045061/article/details/71172409

猜你喜欢

转载自blog.csdn.net/qq_31796651/article/details/89182790