• 效果

  • 前言

       Android很多项目的时候,很多页面的写法大致都差不多,为了提高速度,为什么我们不打造属于自己的模块化 

  

  • 简易创建一个模块

在plugins搜索加入TemplateBuider

重启Android studio,指定一个文件。按下alt+T(option+t),打开templateBuider

应用程序⁩ ▸ ⁨Android Studio⁩ ▸ ⁨Contents⁩ ▸ ⁨plugins⁩ ▸ ⁨android⁩ ▸ ⁨lib⁩ ▸ ⁨templates⁩ ▸ ⁨yuwenchao⁩找到demo文件(window类似)

把文件夹复制出来,用studio运行。

 

  • 文件和相关语法讲解

  一、通用语法

通用语法
${frameName} id为frameName的值(name)
${activityToLayout(activityName)} activity转layout
${layoutToActivity(layoutName)} layout转activity
${classToResource(frameName)} 类转换资源文件昵称

  一、ui布局语法讲解(template)

template语法
id="isMvp" id
name="is mvp" 昵称
type="boolean" 类型(boolean,string,enum)
default="true" 默认值
help="是否启动mvp架构" 注解

constraints="package"

constraints="class|unique|nonempty"

class 类

unique 唯一

nonempty 不能喂null

package 包

layout 布局

可以几个一起共用

suggest="${frameName}Presenter"
visibility="isRecyclerview" 是否显示

三、 FreeMarker语法

FreeMarker语法
${frameName} id为frameName的值(name)

<#if relativePackagehas_content>

${relativePackage}

<#else>

${packageName}

if else 语句
   
   

四、运行recipe语法

recipe语法

from="root/src/app_package/PureContract.java.ftl"

to="${baseDir}/${slashedPackageName

(contractPackageName)}/${contractName}.java" />

from文件来源什么

to创建文件目的地址

五、资源文件定义方式

package ${activityPackageName};import ${packageName}.databinding.${activityBind};import ${packageName}.R;import com.purewhite.ywc.purewhitelibrary.mvp.activity.BaseMvpActivity;<#if isMvp><#if !isFile>import ${contractPackageName}.${contractName};import ${presenterPackageName}.${presenterName};<#else>import com.purewhite.ywc.purewhitelibrary.mvp.presenter.BasePresenter;<#if isSwipe>import com.purewhite.ywc.purewhitelibrary.adapter.swipe.SwipLoadListener;<#if isRecyclerview>import ${packageName}.mvp.adapter.${adapterName};import androidx.recyclerview.widget.LinearLayoutManager;public class ${activityName} extends BaseMvpActivity<${activityBind},${basePresenter}> ${contractImp} {   <#if isRecyclerview>   private ${adapterName} adapter;      <#if isSwipe>   private SwipLoadListener swipLoadListener=new SwipLoadListener() {        @Override        public void pullDown() {        }   };      @Override    protected int getLayout() {        return R.layout.${activityLayout};    }    @Override    protected void initView() {        <#if isSwipe>        mDataBinding.swipeLayout.setOnLoadLinstener(swipLoadListener);                <#if isRecyclerview>        adapter=new ${adapterName}();        mDataBinding.recyclerView.setAdapter(adapter);        mDataBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));            }    <#if !isMvp>     @Override     protected boolean isPresenter() {         return false;     }    }

思路

1.创建文件之后,目标文件不变的方法可以直接书写

2.如果目标文件会发生变化就必须使用变量去替换

   如类名(${activityName} )

   类名databing地址(${packageName}.databinding.${activityBind})

 

六、globals文件思路

1.这个共有文件,如果很多资源文件会使用到共同方法,可以把这个方法写再globals文件下

2.如果这个名字或者参数,方法比较长,也可以考虑写再这个文件下

 

demo地址  https://github.com/YwcSillyWhite/templateMvp 

 

 

有什么不懂的,或者有好的提议可以添加qq 1075770029,或者加qq群127299409,欢迎大家一起讨论

更多相关文章

  1. android 引入jni 的so库的方法
  2. Android之几个dos小命令
  3. ANDROID Porting系列二、配置一个新产品
  4. 一步一步学习androidNDK编程(java给c传递数据)
  5. android背景选择器selector用法
  6. Android(安卓)Studio 之 AndroidManifest.xml文件中的android:la
  7. 安装android sdk 遇到几个问题
  8. android:sharedUserId="android.uid.system" 系统级权限并重新系
  9. android studio打包apk时遇见的一些问题

随机推荐

  1. 如何在Java中递归解压缩文件?
  2. 试图改变Jtable java中行的颜色
  3. idea下Kotlin的扁平化集合flatMap
  4. 使加权图在JGraphT中工作
  5. 如何将动态参数传递给jquery函数
  6. android中java.net.Socket的默认超时值是
  7. 使用Java管理Azure(1):基础配置
  8. java中 16进制字符串 与普通字符串 与 by
  9. java 构造器内部的多态方法和行为
  10. java I/O流初步认识使用