开源软件名称: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.0New Done1.FragmentActivity的View标签生成2.fragment标签生成3.完善测试实例 UnfinishedNext1.剥离动态模版构建架构独立成为新项目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 (如指定了接口也会一并生成),并对应生成onCreate 、onCreateView 、onViewCreated 方法 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 |
请发表评论