本文模版結(jié)構(gòu)參考:谷歌todo-mvp-rxjava
模版結(jié)構(gòu)
文件功能
app_package 存放模版生成所需class和layout
globals.xml.ftl 全局變量藐不;可以定義任何想在模版中引用的變量
recipe.xml.ftl 模版生成腳本拄显;定義模版生成規(guī)則
template.xml gui配置文件
template_blank_activity.png gui中的預(yù)覽圖片
開始編寫
最快的編寫辦法设凹,當(dāng)然是從原有模版的基礎(chǔ)上修改嘍沼琉。。奏夫。
插件編寫最偷懶的辦法
當(dāng)然是在已經(jīng)存在的模版上痛垛,直接改嘍。桶蛔。復(fù)制\Android Studio\plugins\android\lib\templates\activities\EmptyActivity到工作區(qū)
修改template.xml
在template.xml中匙头,通過添加parameter節(jié)點的方式,創(chuàng)建gui中的控件仔雷。根據(jù)項目要蹂析,添加Contract、Presenter的定義碟婆。
修改globals.xml.ftl
該文件作用电抚,定義全局變量∈玻可以在java或layot模版中使用蝙叛。
在原有文件基礎(chǔ)上,定義relativePackage參數(shù)公给,因為我們的activity是創(chuàng)建在${packageName}.view文件夾下借帘。
```
<global id="relativePackage" type="string" value="${packageName}.view">
```
編寫自己的class模版,app_package.class/app_package.layout
Activity.java.ftl
```
package ${packageName}.view;
import ${superClassFqcn};
import android.os.Bundle;
import android.content.Context;
import android.content.Intent;
import ${packageName}.contract.${contractClass};
import ${packageName}.presenter.${presenterClass};
public class ${activityClass} extends ${superClass} implements ${contractClass}.View {
private ${contractClass}.Presenter presenter;
public static Intent getIntent(Context ctx){
Intent intent = new Intent(ctx, ${activityClass}.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.${layoutName});
initView();
initData();
}
private void initView(){
}
private void initData(){
presenter = new ${presenterClass}(this);
}
@Override
protected void onDestroy() {
presenter.destroy();
super.onDestroy();
}
}
```
IContract.java.ftl
```
package ${packageName}.contract;
public interface ${contractClass} {
interface View{
}
interface Presenter extends IBaseContract.IBasePresenter{
}
}
```
Presenter.java.ftl
```
package ${packageName}.presenter;
import ${packageName}.contract.${contractClass};
public class ${presenterClass} extends BasePresenter implements ${contractClass}.Presenter{
private ${contractClass}.View view;
public ${presenterClass}(${contractClass}.View view) {
this.view = view;
}
@Override
public void destroy() {
view = null;
}
}
```