android 布局 View初始化代码自动生成
2014-09-25 15:22
369 查看
在android开发过程中,界面布局是及其重要的,但同时也是复杂。有的时候我们急于实际运行查看布局效果。但是android的编译速度我实在不想吐槽啥,尤其在布局越来越复杂,项目越来越大,资源文件越来越多的情况下。
尤其是是android的view的初始化,findViewbyId 完全是体力活,我们完全可以根据布局文件自动生成View的初始化代码。
首先声明:
1.这是及其容易做到的,实用性性一般,但是在复杂布局和首次写初始化View代码的时候及其好用。
2.只能生成有id标签的view的初始化代码。
然后一点点的拼接代码
最后是测试类main方法。
尤其是是android的view的初始化,findViewbyId 完全是体力活,我们完全可以根据布局文件自动生成View的初始化代码。
首先声明:
1.这是及其容易做到的,实用性性一般,但是在复杂布局和首次写初始化View代码的时候及其好用。
2.只能生成有id标签的view的初始化代码。
思路
其实很简单,就是解析layout 布局文件,把有id属性的标签的一些信息(标签类型,id名称等)存起来,然后根据这些信息生成固定的代码。实现
直接上代码,首先是对layout文件的解析,把解析出来的信息放在一个list中public class SaxHander extends DefaultHandler { private List<IdNamePair> map = new ArrayList<IdNamePair>(); @Override public void startDocument() throws SAXException { super.startDocument(); map.clear(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); // System.out.println("-------------------------------------"); String tempid = attributes.getValue("android:id"); String id = null; if (tempid != null) { String[] ss = tempid.split("/"); if (ss != null && ss.length == 2) { id = ss[1]; } } if (id != null) { map.add(new IdNamePair(id, qName)); } // System.out.println(id); // System.out.println(qName); } public List<IdNamePair> getRes() { return map; } }
public class IdNamePair { private String id; private String name; /** * @param id * @param name */ public IdNamePair(String id, String name) { super(); this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
然后一点点的拼接代码
public class ViewCodeUtil { static SAXParserFactory saxfac = SAXParserFactory.newInstance(); static SaxHander mySax = new SaxHander(); public static String getCode(String resFileName){ File f = new File(resFileName); if (!f.exists()) { return null; } try { saxfac.newSAXParser().parse(f,mySax); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } List<IdNamePair> res = mySax.getRes(); StringBuilder sb = new StringBuilder(); StringBuilder sb1 = new StringBuilder(); sb.append("//---------- 开始定义域--------------\n"); sb1.append("//----------开始initView方法------------------\n"); sb1.append("public void initView() { \n"); for (IdNamePair idNamePair : res) { sb.append(" private "+idNamePair.getName()+" "+ idNamePair.getId()+idNamePair.getName()+";\n"); sb1.append(" "+idNamePair.getId()+idNamePair.getName()+" = ("+idNamePair.getName()+")findViewById(R.id."+idNamePair.getId()+");\n"); } sb1.append("}\n"); // System.out.println(sb.toString()); // System.out.println(sb1.toString()); return sb.append(sb1.toString()).toString(); }
最后是测试类main方法。
public class Test { private static final String[] layoutFiles ={"./res/g_ruler.xml","./res/report.xml"}; public static void main(String[] args) { if (args!=null) { for (int i = 0; i < args.length; i++) { System.out.println(""); System.out.println("---------"+args[i]+"----------"); System.out.println(ViewCodeUtil.getCode(args[i])); } } for (int i = 0; i < layoutFiles.length; i++) { System.out.println(""); System.out.println("//---------"+layoutFiles[i]+"----------"); System.out.println(ViewCodeUtil.getCode(layoutFiles[i])); } } }
相关文章推荐
- Android中实现自动生成布局View的初始化代码方法
- android findview 自动生成工具 xml布局文件自动转换类模板代码工具
- 【Android】Android Layout Binder——根据layout布局文件自动生成findViewById的java代码的神器
- Android Studio插件LayoutCreator在Activity/Fragment中自动生成findViewById等布局相关初始化代码 或者在Adapter中自动生成ViewHolder
- Android Studio插件-自动根据布局生成Activity等代码(插件代码开源)
- [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)
- 根据Android Layout XM文件自动生成自定义View代码的工具类
- 借助VBA语言来分析布局代码,自动生成Android控件的定义代码
- AndroidAnnotations 根据布局自动生成@ViewById
- Android 解决升级到SDK4.4.2后Eclipse不自动生成Activity和xml布局的问题
- (2)通过脚手架自动生成controller和view ----代码先行/数据库先行
- devexpress layoutcontrol 自动生成布局示例代码
- android之自定义ViewGroup和自动换行的布局的实现
- 【代码生成Android布局】例.用户信息界面的生成
- android之自定义ViewGroup和自动换行的布局的实现
- Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout
- 为什么在eclipes为创建一个android布局文件在R中没有自动生成
- android之自定义ViewGroup和自动换行的布局的实现
- android之自定义ViewGroup和自动换行的布局的实现
- android之自定义ViewGroup和自动换行的布局的实现