快速生成MVP代码模板

快速生成MVP代码模板

序言

MVP的优势相信大家都耳熟能详了,但是它的缺点也很明显,需要开发人员创建多个类,复制黏贴,重复的做着同样的事,浪费大量的时间和精力。接下来我们就想办法生成一个代码模板,在创建activity或fragment时,自动生成相关的文件,以及固定的代码模板。

结果:

1.选中包名目录,右键创建MvpActivity;
在这里插入图片描述

2.输入要创建的Activity的名称(Test);在这里插入图片描述

3.看结果(我的模板里没有model层的类)在这里插入图片描述

附上实现快速生成mvp代码模板的具体操作及代码

1.globals.xml.ftl,需要生成类的名称声明

<?xml version="1.0"?>
<globals>
    <#assign Collection=extractLetters(ActivityClass)>
    <#assign collection_name=Collection?lower_case>
    <!-- 这里声明全局变量-->
    <global id="activity_layout" value="${collection_name}" />
    <global id="ActivityName" value="${Collection}Activity" />
    <global id="PresenterName" value="${Collection}ActivityPre" />
    <global id="ContractName" value="${Collection}ActivityCtr" />
    <global id="IPresenterName" value="${Collection}ActivityIP" />
	<global id="IViewName" value="${Collection}ActivityIV" />
	<global id="packageName" value="自己的包名" />
</globals>

2.recipe.xml.ftl,制定需要生成的文件名称和位置

<?xml version="1.0"?>
<recipe>
<!--merge 表示需要合并到指定文件的内容 (表示AndroidManifest声明新建的Activity) -->
   <merge from="root/AndroidManifest.xml.ftl"
             to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
    <!-- instantiate 表示创建文件到指定文件夹   (把需要创建文件的模板放在根目录文件夹下对应文件夹,针对自己的项目修改路径)    -->
    <instantiate from="root/res/layout/activity_mvp.xml.ftl" 
                    to="${escapeXmlAttribute(resOut)}/layout/activity_${activity_layout}.xml" />
    <instantiate from="root/src/app_package/MvpActivity.java.ftl"
                   to="${escapeXmlAttribute(srcOut)}/mvp/view/activity/${ActivityName}.java" />
    <instantiate from="root/src/app_package/MvpPresenter.java.ftl"
                   to="${escapeXmlAttribute(srcOut)}/mvp/presenter/${PresenterName}.java" />
    <instantiate from="root/src/app_package/MvpContract.java.ftl"
                   to="${escapeXmlAttribute(srcOut)}/mvp/contract/${ContractName}.java" />

</recipe>

3.template.xml,activity的信息配置

<?xml version="1.0"?>
<template
    format="5"
    revision="5"
    name="MvpActivity"
    minApi="9"
    minBuildApi="14"
    description="Creates a new mvp activity">
    <category value="Activity" />
    <formfactor value="Mobile" />
	<!--parameter 标签表示创建时需要输入的属性 -->
    <parameter
        id="ActivityClass"
        name="Activity ClassName"
        type="string"
        constraints="nonempty"
        default="Mvp" />
    <thumbs>
        <thumb>template_blank_activity.png</thumb>
    </thumbs>
    <globals file="globals.xml.ftl" />
    <execute file="recipe.xml.ftl" />
</template>

4.AndroidManifest.xml.ftl,清单文件下添加activity配置的模板

<#import "../../common/shared_manifest_macros.ftl" as manifestMacros>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="${packageName}">
    <application>
        <activity android:name=".mvp.view.activity.${ActivityName}"
	    android:configChanges="orientation|screenSize|keyboardHidden"
            android:launchMode="singleTask"
            android:windowSoftInputMode="stateHidden|adjustResize"/>
    </application>
</manifest>

5.MvpActivity.java.ftl,Activity的代码模板,可根据自己的代码修改模板

package ${packageName}.mvp.view.activity;

import ${packageName}.R;
import ${packageName}.mvp.base.BaseActivity;
import ${packageName}.mvp.contract.${ContractName};
import ${packageName}.mvp.presenter.${PresenterName};

public class ${ActivityName} extends BaseActivity<${PresenterName}> implements ${ContractName}.${IViewName} {
    
    @Override
    public int getLayoutId() {
        return R.layout.activity_${activity_layout};
    }

    @Override
    public void initPresenter() {
        mPresenter.setVM(this);
    }

    @Override
    public void initView() {

    }

    @Override
    public void showLoading(String title) {
    }

    @Override
    public void stopLoading() {
    }

    @Override
    public void showErrorTip(String msg) {
    }
}

6.activity_mvp.xml.ftl,对应的布局文件,可根据自己的代码修改模板

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_gravity="center"
        android:text="Hello World!" />
</LinearLayout>

7.MvpContract.java.ftl,Contract类的代码模板,可根据自己的代码修改模板

package ${packageName}.mvp.contract;

import ${packageName}.mvp.base.BasePresenter;
import ${packageName}.mvp.base.BaseView;

public interface ${ContractName} {
    interface ${IViewName} extends BaseView {

    }
    abstract class ${IPresenterName} extends BasePresenter<${IViewName}> {

    }
}

8.MvpPresenter.java.ftl,Presenter类的代码模板,可根据自己的代码修改模板

package ${packageName}.mvp.presenter;

import ${packageName}.mvp.contract.${ContractName};

public class ${PresenterName} extends ${ContractName}.${IPresenterName} {

}

1.将以上文件放在MvpActivity文件夹下(里面的文件结构参考其他activity模板)

并放入目录:AndroidStudio\plugins\android\lib\templates\activities\

2.MvpFragment模板类似MvpActivity模板,不同点

a.并放入目录:AndroidStudio\plugins\android\lib\templates\other\
b.不需要AndroidManifest.xml.ftl文件
c.template.xml文件模板信息不同:
		<?xml version="1.0"?>
		<template
		    format="5"
		    revision="3"
		    name="MvpFragment"
		    minApi="7"
		    minBuildApi="8"
		    description="Creates a new mvp fragment">
		
		    <category value="Fragment" />
		    <formfactor value="Mobile" />
		    
		    <dependency name="android-support-v4" revision="8" />
		
		    <parameter
		        id="className"
		        name="Fragment Name"
		        type="string"
		        constraints="class|nonempty|unique"
		        default="Mvp"
		        help="The name of the fragment class to create" />
		    <parameter
		        id="fragmentName"
		        name="Fragment Layout Name"
		        type="string"
		        constraints="layout|nonempty|unique"
		        default="fragment_mvp"
		        visibility="includeLayout"
		        suggest="fragment_${classToResource(className)}"
		        help="The name of the layout to create" />
		    <thumbs>
		        <thumb>template_blank_fragment.png</thumb>
		    </thumbs>
		    <globals file="globals.xml.ftl" />
		    <execute file="recipe.xml.ftl" />
		</template>

3.重启Android Studio即可。

参考大神文章:【Android】一键生成MVP代码-DevMvp快速开发框架

猜你喜欢

转载自blog.csdn.net/weixin_38617084/article/details/88687881