通过freemaker将写好的android layout文件生成对应的java代码,主要生成Activity 和 Fragment两类,这样可以减少很多开发中的机械操作,再也不用一一对应的把layout文件中View标签copy到java代码中了。
?
详细思路:
读取指定路径下的layout文件,根据layout文件命名规则生成对应Activity或者Fragment的Java类,并将布局文件中对应的 View标签生成该Java类的属性对象,且根据View标签的id属性生成该属性的变量名。
?
该项目下的 layout文件的命名规则如下:
hello_word_activity.xml,该布局文件则会生成一个 HelloWordActivity.java文件,且继承于RoboFragmentActivity(用于roboguice框架,不习惯该框架的变更模版就行了)
main_fragment.xml,对应该布局文件则会生成MainFragment.java文件,并继承于RoboFragment(同上)
?
java文件中会根据配置生成对应的一些package引入和基础的代码,接下来则根据layout文件中的标签属性生成对应的Java属性对象,规则如下:
?
class="xml"><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这一抽象类,其中很多生成规则的东西都可以在这里实现其抽象方法,在CodeBuilder的代码中的defaultNameGenerater对象算是一个比较详尽的列子。
?
该项目是一个个人项目,该例子仅提供了一个思路,很多地方考虑得并不周全,写得也不够完善,欢迎大家讨论并共同完善他。
?
项目开放git仓库地址:https://git.oschina.net/eleaf/android-layout2code-builder.git
?
转载请注明作者:楼若生 并附上原文链接:http://dzlg.iteye.com/admin/blogs/2124556