• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

android-layout2code-builder: 通过freemaker将写好的android layout文件生成对应的ja ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

android-layout2code-builder

开源软件地址:

https://gitee.com/eleaf/android-layout2code-builder

开源软件介绍:

Android Layout2Code Builder

通过freemaker将写好的android layout文件生成对应的java代码,主要生成Activity和 Fragment两类,这样可以减少很多开发中的机械操作,再也不用一一对应的把layout文件中View标签copy到java代码中了。

更新 build-0.3.0

New Done

1.FragmentActivity的View标签生成2.fragment标签生成3.完善测试实例

Unfinished

Next

1.剥离动态模版构建架构独立成为新项目2.基于所剥离的重新实现该项目

项目说明

通过读取指定路径下的layout文件,根据layout文件命名规则生成对应Activity或者Fragment的Java类,并将布局文件中对应的 View标签生成该Java类的属性对象,且根据View标签的id属性生成该属性的变量名。

该项目下的 layout文件的命名规则示例如下:

hello_word_activity.xml

该布局文件则会生成一个HelloWordActivity.java文件,且继承于模版所指定的某个Activity类(如指定了接口也会一并生成),并对应生成OnCreate方法

main_fragment.xml

对应该布局文件则会生成MainFragment.java文件,并继承于模版所指定的某个Fragment(如指定了接口也会一并生成),并对应生成onCreateonCreateViewonViewCreated方法

java文件中会根据配置生成对应的一些package引入和基础的代码,接下来则根据layout文件中的标签属性生成对应的Java属性对象,规则如下:

<TextView andorid:id=”@id+/hello_word_text”/>

对应生成如下java代码:

import android.widget.TextView ;//这段引入代码是在文件头部分,这里只是为了简便,就没加上类名等代码

@InjectView(R.id.hello_word_text)

private TextView mHelloWordText;

每个layout文件中,只有写了 android:id=”@id+/”这一属性的标签才会在对应java类中声明对应变量

对象的变量名的生成规则也可自行定义,详情参考代码中NameGenerater这一节接口类。

直观代码例子请参考Test类,demo如下

示例

public static void main( String[] args ) throws ResourcesException {	MyNameGenerater defaultNameGenerater = new MyNameGenerater ();	ClassTemplate activityTemplate = ClassTemplate.Builder.build ( LayoutType.ACTIVITY, true, defaultNameGenerater ).extendsClass ( Activity.class )			.implementsInterface ( View.OnClickListener.class ).commit ();	ClassTemplate fragmentTemplate = ClassTemplate.Builder.build ( LayoutType.FRAGMENT, true, defaultNameGenerater ).extendsClass ( Fragment.class )			.implementsInterface ( View.OnClickListener.class ).commit ();	CodeGenerater codeBuilder = new CodeGenerater ();	codeBuilder.generate ( "E:\\WorkSpace\\ForAndroid\\TestAndroid\\", activityTemplate, fragmentTemplate );}private static class MyNameGenerater extends DefaultNameGenerater {	@Override	public String generateHostPackage() {		return "com.example.testandroid";	}} 

调用以上方法时,请将目标项目添加到该项目的build path下,以便于构建模版时可以调用目标项目的自定义类。如果所调用的类引用了除android.jar、android-support-v4.jar、freemaker.jar等以外的依赖包,请将对应引用包也添加进该项目的build path,避免代码生成异常

DefaultNameGenerater

实现于NameGenerater,用于类名、方法名、变量名、包路径等命名规则生成,建议根据自身需求实现NameGenerater这一接口,而不是采用DefaultNameGenerater来完成生成

ClassTemplate

主要的模版对象,用于构建freemaker的模版内容,通过ClassTemplate.Builder来实例化并构筑内容,包含了要继承的对象,实现的接口(所有需要实现的接口类都会自动生成其接口方法)

CodeGenerater

将layout文件生成对应Java文件的核心类

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap