如何写自定义Activity、Fragment模板
来源:互联网 发布:把mac里的文件拷到u盘 编辑:程序博客网 时间:2024/05/21 23:22
因为在项目中使用MVP模式,所以每次新建一个Activity、Fragment的时候都要写一大堆的类,接口和Presenter。如果加上Dagger2,那酸爽,简直了。
上篇有提到MVP+Rx的结构,这篇博客就基于上篇博客来自定义一个模板文件, 如果不想自己重头开始写的, 可以把我发在github上的模板稍微改改就可以用了,需要掌握一些基本规则。
先讲讲如何修改一下
首先可以到我的github上面去下载一个模板
https://github.com/sunflowerseat/MVPDemo/tree/master/MVPActivityTemplate/MVPActivity
https://github.com/sunflowerseat/MVPDemo/tree/master/MVPFragmentTemplate/MVPFragment
然后打开,看一下一个模板文件的结构
把这个模板文件夹复制一份到
把两个模板文件复制到 AS根目录\plugins\android\lib\templates\activities 下
如果需要立刻看一下这个模板的效果,建议先把我发在github上的demo克隆下来。https://github.com/sunflowerseat/MVPDemo
新建一个MVPActivity、MVPFragment就能看到效果了。
注意: 假设程序包名为 a.b.c 不要在a.b.c这个包下面新建Activity、Fragment. 除了这个包,其他的均可以
简单说一下这几个文件的作用。
root是用于存放要生成的文件的模板的,比如上例,我新建一个TestActivity的时候,需要同时生成:
TestActivity.java
activity_test.xml
ITest.java
TestPresenter.java
四个文件,这已经算很少的了,多几个文件也一样操作。
把需要生成的文件,复制到root目录下,layout文件放到root/res/layout下面。java文件放到root/src/app_package下面。
globals.xml.ftl 是用于存放全局变量的。如果没有特殊要求,不需要动,如果要改,可以参考系统其它Activity模板中的修改。
recipe.xml.ftl 是用于配置,具体要生成哪些文件, 要打开哪几个文件的。
<!--假如functionName 填写的是 Test 模块名称也就是 modular 填写的是home 那么 fragmentName = TestFragment layoutName = fragment_test --> <!--生成一个TestFragment在新建Fragment的位置(包)中 使用模板SampleFragment--> <instantiate from="root/src/app_package/SampleFragment.java.ftl" to="${escapeXmlAttribute(srcOut)}/${fragmentName}.java" /> <!--生成一个fragment_test在系统res/layout/目录下 使用模板fragment_sample----> <instantiate from="root/res/layout/fragment_sample.xml.ftl" to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" /> <!--生成一个ITest在 applicationPackage 是你的应用包名 如:a.b.c ${slashedPackageName(applicationPackage)} 则为a/b/c manifest的同级目录下的/java文件夹/a/b/c/ 之后的就不说了自己填写自己想要放置的位置即可 --> <instantiate from="root/src/app_package/INone.java.ftl" to="${escapeXmlAttribute(manifestOut)}/java/${slashedPackageName(applicationPackage)}/act_interface/${modular}/I${pageName}.java" /> <instantiate from="root/src/app_package/NonePresenter.java.ftl" to="${escapeXmlAttribute(manifestOut)}/java/${slashedPackageName(applicationPackage)}/act_presenter/${modular}/${pageName}Presenter.java" /> <!-- 打开layout文件和Fragment文件 --> <open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml"/> <open file="${escapeXmlAttribute(srcOut)}/${fragmentName}.java" />
template.xml简单说下,其实就是为这些变量赋值,不用修改,想改也简单,参考一下就能修改了, 这应该难不倒大家。
这里的pageName 对应的 ${pageName}
FragmentName 对应的${fragmentName}
Fragment Layout Name 对应的${layoutName}
Modular Name 对应的${modular}
接下来我们需要完成最后一步。
把之前复制到root目录下的文件后缀名修改成ftl。
然后全部打开。
博客简单说一下如何修改一个文件变成Template。其他的同理。
先看看我们的TestPresenter
package com.fancy.mvpdemo.act_presenter.test;import com.fancy.mvpdemo.act_interface.test.ITest;import com.fancy.mvpdemo.act_presenter.base.BasePresenter;/** * create by sunflowerseat. */public class TestPresenter extends BasePresenter<ITest> { private ITest iview; public TestPresenter(ITest main) { this.attachView(main); iview = getView(); }}
这个文件需要生成在com.fancy.mvpdemo.act_presenter.test目录下, 把recipe.xml.ftl里面的生成路径修改一下即可。
以上代码中“com.fancy.mvpdemo”对应的是程序的包名。 改成
其他修改同理。修改后的模板文件为:
package ${applicationPackage}.act_presenter.${modular};import ${applicationPackage}.act_interface.${modular}.I${pageName};import ${applicationPackage}.act_presenter.base.BasePresenter;/** * Created by sunflowerseat. */public class ${pageName}Presenter extends BasePresenter<I${pageName}> { private I${pageName} iview; public ${pageName}Presenter(I${pageName} main) { this.attachView(main); iview = getView(); }}
这种简单的改动,相信大家都能完成, 最后就是把写好的模板文件复制到 AS根目录\plugins\android\lib\templates\activities 下,重启studio即可使用。
注意: 假设程序包名为 a.b.c 不要在a.b.c这个包下面新建Activity、Fragment. 除了这个包,其他的均可以。
如果写好的模板文件报错,一般都会有提示是什么错误,以及错误的位置, 仔细检查模板文件。然后修改就可以了。
我也把模板Acitivity的代码发到了github上,供大家参考学习,共同进步。
https://github.com/sunflowerseat/MVPDemo/tree/master/MVPActivityTemplate/MVPActivity
https://github.com/sunflowerseat/MVPDemo/tree/master/MVPFragmentTemplate/MVPFragment
最后再简单理一下,如何简单修改一下示例模板文件,变成适合自己的MVP模板文件。
1、把上面链接中的文件夹从github上面下载下来。
2、把需要生成的文件放到root目录下的对应目录中,并修改增加后缀.ftl
3、global.xml.ftl不要去动
4、recipe.xml.ftl简单修改成自己的模板文件名称和文件放置的目录
以及 生成的位置,注意recipe.xml.ftl是可以使用template中的变量的。
5、template.xml也不用修改。
6、参照文中修改TestFragment的例子,修改所有需要生成的模板文件。
最后贴一下这个Android模板中内置的一些变量对应的值和我在探索模板的过程中记录笔记。我们在模板文件中不仅可以使用自己定义的变量,也可以使用内置的一些变量。
${relativePackage} 相对包名,你在那个包建的文件,这个包名则为那个包${slashedPackageName(projectPackage)} 把 .cc.aa 这种形式的包名替换成 /cc/aa${escapeXmlAttribute(resOut)} res的绝对路径${escapeXmlAttribute(srcOut)} src的绝对路径${escapeXmlAttribute(manifestOut)} manifest的绝对路径${activityToLayout(activityClass)} 根据activityClass生成activityLayout的名字${applicationPackage} 应用程序包名,即applicationId
简单说一下template.xml中的parameter每个变量的作用。
<parameter id="activityLayoutName" name="Layout Name" type="string" constraints="layout|unique|nonempty" suggest="${activityToLayout(activityClass)}" default="activity_main" help="The name of the layout to create for the activity" />
id 这个不多说,变量名称name 显示在模板上,需要程序员填写的变量值type 变量的类型 string则显示文本框 boolean则显示复选框constraints 约束 layout,必须符合layout的命名,unique唯一的, nonempty不能为空suggest 提示default 默认值help 帮助, 告诉用户这个变量相对于模板的作用, 不重要
对本文内容有任何疑问欢迎加群讨论:283272067
- 如何写自定义Activity、Fragment模板
- 如何使用viewpager与fragment写一个app导航activity
- Activity如何跳转Fragment
- 自定义Activity模板
- Activity与Fragment如何通信
- Activity和Fragment如何通信?
- 【 Android Studio】自定义Activity模板
- 如何自定义Activity
- 如何自定义模板类
- 如何把fragment添加到activity中
- Activity销毁时如何保存Fragment状态
- 如何在Fragment中获取Activity
- Activity和Fragment如何进行通信
- fragment 如何向 activity 传递数据
- Activity如何向Fragment中传递数据
- Android Studio的Activity自定义模板介绍
- Android Studio 自定义创建Activity模板
- 如何自定义activity窗口标题!!
- 自己实现二叉树
- POJ 1039 Pipe
- ECMAScript6-学习笔记(数值的扩展)
- jmap 查看内存使用直方图
- R语言学习之关联规则算法
- 如何写自定义Activity、Fragment模板
- Java String类
- 最长递增子序列的O(NlogN)算法
- request取不到post请求过来的参数
- AFNetworking 批量上传统一返回图片的3种方法
- 二叉树
- HDU 2050 折线分平面
- 10048--- AtomicInteger的介绍和使用
- 数据库事务ACID