16 Star 33 Fork 6

EchoLeaf / android-layout2code-builder

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

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文件的核心类

空文件

简介

通过freemaker将写好的android layout文件生成对应的java代码,省去不少机械操作。 该项目所用的模板是以自己的开发习惯为范例所写,仅提供一种思路,请根据实际情况自行定义。 展开 收起
Android
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Android
1
https://gitee.com/eleaf/android-layout2code-builder.git
git@gitee.com:eleaf/android-layout2code-builder.git
eleaf
android-layout2code-builder
android-layout2code-builder
master

搜索帮助