本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
android studio template模块开发
奔跑的男人 · 764浏览 · 发布于2019-09-25 +关注

效果

20190924103115541.png

前言

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


简易创建一个模块

在plugins搜索加入TemplateBuider

20190911153212861.png


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

20190911153617390.png


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

20190911154030382.png


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

20190911154410817.png


文件和相关语法讲解

 通用语法


${frameName}                                                  

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



ui布局语法讲解(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语法

${frameName} 

id为frameName的值(name)

<#if relativepackagehas_content="">


${relativePackage}


<#else>


${packageName}

if else 语句

 

四、运行recipe语法

<instantiate


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 


相关推荐

android下vulkan与opengles纹理互通

talkchan · 1179浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 2176浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 869浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 754浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页