在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!

一、起因

想必使用AndroidStudio做开发并且使用ButterKnife的朋友们肯定听说过ButterKnifeZelezny这个组件吧,它可以一键从 布局文件中 生成对于的 View 声明和 ButterKnife 注解。

详情请看图:

真是太方便了!!!!一键生成啊有木有!!!!脱离苦海啊有木有!!!!

但是等等,我到现在还是不习惯用AndroidStudio,虽然会用但是正式开发项目,还是更加喜欢Eclipse的开发方式,于是我就在想,Eclipse有没有这样的插件呢?

显然,我想多了。

不过既然没有,那就自己做一个吧。

二、思路

俗话说“解铃还须系铃人”,既然要思路,自然就是从ButterKnifeZelezny来了,在我看来ButterKnifeZelezny主要就是几个步骤

1.解析XML

2.分析组件

3.生成ButterKnife注解

那么,我可不可以利用批处理和JAVA文件结合的方式做一个批处理文件,只要把布局文件拖入批处理文件中就可以解析出这个布局文件中有哪些组件设置了ID属性,并把这些组件和ID提取出来,最后利用字符串拼装技术把它组合成我要的写法,然后写入到系统的黏贴板中,最后由用户CTRL+V 黏贴到指定的Activity中去就可以了?

我看行!

三、开整

思路已经有了,剩下的就是开始做了,首先当然要解决的是XML解析问题。

基本上不用想太多,利用DOM4J解析就可以了。

先建立一个Java Project

然后添加工具类

LayoutUtil.java(解析布局文件的工具类)

package util;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class LayoutUtil {

	/**
	* @author 活力橙
	* @creation 2015-6-26
	*/

	public static Map<String,String> ParseLayout(String filePath){

		Map<String,String> UnitMap=new HashMap<String,String>();

		  Document doc = null;
	        try {
	            doc = new SAXReader().read(new File(filePath));
	        } catch (DocumentException e) {
	            e.printStackTrace();
	        }
	       Element root = doc.getRootElement();
	       if(root.attributeValue("id")!=null&&root.attributeValue("id").length()>0){

	    	   UnitMap.put(root.getName(), root.attributeValue("id"));

	       }
	      // System.out.println("根节点:"+root.getName()+",内容:"+root.attributeValue("id"));
	       getElement(root,UnitMap);

		return UnitMap;

	}

	private static void getElement(Element element,Map<String,String> map){
        List list = element.elements();
        //递归方法
        for(Iterator its =  list.iterator();its.hasNext();){
            Element chileEle = (Element)its.next();
            if(chileEle.attributeValue("id")!=null&&chileEle.attributeValue("id").length()>0){

            	map.put(chileEle.getName(), chileEle.attributeValue("id"));

 	       }
          //  System.out.println("节点:"+chileEle.getName()+",内容:"+chileEle.attributeValue("id"));
            getElement(chileEle,map);
        }
    }   

}

既然可以解析XML,那么下一步要做什么呢?当然是编写拼接字符串的工具类了,这个类也是生成ButterKnife注解格式的核心类,如果你想做别的方式的写法或者原生的写法,修改这个类就可以了。

SpellUtil.java

package util;

public class SpellUtil {

	/**
	* @author 活力橙
	* @creation 2015-6-26
	*/
	public static String SpellUnit(String unit,String id){

		StringBuffer parseText=new StringBuffer();
		id=id.replace("@+id/", "");
		parseText.append("@InjectView(R.id."+id+")"+"\r\n");
		parseText.append(unit+" "+id+";");
		return parseText.toString();

	}

}

解析也有了,拼接也有了,剩下的要做什么呢?

当然就是把拼接好的字符串复制到黏贴板上了,还是个工具类。

ClipBoard.java

package util;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
public class ClipBoard {
	/**
	* @author 活力橙
	* @creation 2015-6-26
	*/

	public static void actionPerformed(String text) {
	Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //获得系统粘贴板
	StringSelection textInfoSelected = new StringSelection(text); //建立一个粘贴板内容实例.
	clipboard.setContents(textInfoSelected, null); //将textInfoSelected加入到粘贴板中;
	}
}

OK,万事俱备,剩下的就是要写bat文件和调用的Main方法入口了。

也非常简单

CreateLayooutXml.java

<span style="font-size:18px;">package util;

import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.util.Map;

public class CreateLayooutXml {

	/**
	* @author 活力橙
	* @creation 2015-6-26
	*/

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String,String> map=LayoutUtil.ParseLayout(args[0]);
		String parseText="";
		for(Map.Entry<String, String> entry:map.entrySet()){
		     parseText += SpellUtil.SpellUnit(entry.getKey(),entry.getValue())+"\n";
		}   

		System.out.println(parseText);

		ClipBoard.actionPerformed(parseText);

	}

}</span>

到此为止,Java方面要做的事情已经做完了,注意:

<span style="font-size:18px;">LayoutUtil.ParseLayout(args[0]);</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这句话的意思就是编译的时候,这参数需要从批处理文件中传入,传入的内容其实就是布局文件的路径</span>

剩下的事情就是要写一个批处理文件,然后可以传入文件路径,可以执行CreateLayoutXml.java中的Main函数就可以了。

ButterKnife_Jia.bat

@echo off

echo path:%~dp0

set base=%~dp0

set class=%base%\bin
set libs=%base%\lib

set class_path=%class%;%libs%\dom4j-1.6.1.jar;
@set input=
@set /p input=拖入布局文件并回车:

java -classpath %class_path% util.CreateLayooutXml %input%
echo %该布局的初始化内容已复制到黏贴板
@pause

好了,很好,基本上我们已经完成了这个工具的全部编码工作,这个工具的文件工程结构是这样的:

看上图,lib中放的是dom4j.jar,util中放置的是.class文件,bat文件放置在最外边。

然后开始执行bat文件

OK,批处理文件执行到这步了,等待你传入一个布局文件,只要从你的eclipse里的工程中的layout文件夹下随便拖拽一个xml到bat文件中,并按下回车就可以了,接着你就会看到

如上图所示,你的ButterKnife的写法的注解已经生成了,并且已经在你的黏贴板中了,还等什么呢,找到对应的Activity,Ctrl+V吧!!!!

下边是我Ctrl+V的哦:

@InjectView(R.id.loc_btn)

Button loc_btn;

@InjectView(R.id.loc_info)

TextView loc_info;

四、总结

其实这个小工具没什么技术难点,关键的地方还是思路和JAVA的基本功,相信大家看完之后,也可以写出很多类似这样的小组件,加油!

资源下载路径:

http://download.csdn.net/detail/jasoncol_521/8841311

时间: 2024-10-08 19:41:46

在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!的相关文章

在eclipse的工具栏中不显示Android SDK and AVD Manager

通过下面的方法将Android SDK and AVD Manager显示到 eclipse的工具栏中: 1.选择Window->Customize Perspective 2.在Command Groups Acailability选项卡中勾选Android SDK and AVD Manager选项

ADT中,运行Android程序出错:The connection to adb is down, and a severe error has occured

原文地址:http://www.crifan.com/android_adt_the_connection_to_adb_is_down__and_a_severe_error_has_occured/ [总结] 出现 The connection to adb is down, and a severe error has occured 的问题,主要是由于adb没法正常运行起来: 而adb没法运行起来,主要是其端口被占用了: 常见的,可能的占用adb端口的,是你当前电脑上和手机相关的管理软件

C#中对sqlserver进行增删改查操作(简单易懂)

1.添加引用using System.Data;using System.Data.SqlData; 2.建立于数据库的连接,建议将它做成一个方法,方便多次利用.string sqlconnection = "data source = "注解1";database = 注解2;uid = "注解3";pwd ="注解4"";(其实还有很多种写法)可以参考http://www.cnblogs.com/delphinet/arc

Eclipse ADT中的logcat不显示解决方法

Eclipse ADT中的logcat不显示解决方法: 1.在Eclipse界面中找到DDMS,然后找到device选项卡,在这个选项卡中选择reset adb,如果不行尝试方法2: 2.不用关闭eclipse和模拟器,在Android SDK的tools目录下有个 ddms.bat 批处理文件,运行这个文件可以启动DDMS,同时这里面有logcat,可以显示信息: 3.以上方法都不行,最终杀手锏就是重启eclipse,重启模拟器,记得在任务管理器中关闭adb.exe,这时应该就可以了. 4.用

更新Android SDK之后Eclipse提示ADT版本过低

参考文章:http://blog.sina.com.cn/s/blog_6f0c85e10100v6pv.html 多谢分享. 在更新SDK之后,进入Eclipse提示adt版本过低. 方案一:换最新版的Eclipse,这个我没试过. 方案二:修改 %android_home%\tools\lib目录下的“plugin.prop” 中的值. 提示我版本过低时,里面的值是 在修改过后 再进入Eclipse就能设置了 更新Android SDK之后Eclipse提示ADT版本过低,布布扣,bubuk

搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)

——搭建android开发环境的方式有多种,比如:JDK+Eclipse+SDK+ADT或者JDK+Eclipse+捆绑好的AndroidSDK或者Android Studio. Google 决定将重点建设 Android Studio编译工具.Google 在去年年底终止支持其 Eclipse包括插件ADT.(Android Studio会是一个趋势). 这篇将仅作为一个笔记吧,因为之前一直使用Word,记事本记录一些笔记之类.(大神勿喷,如有错误不当的地方,还望指出.谢谢!) 搭建开发环境

转:更新Android SDK之后Eclipse提示ADT版本过低的一个简易解决办法

拜GFW所赐,对于初学者的我来说,总会出现一些莫名其妙的问题 首先说明一下发表这一篇博文的“历史原因”吧,因为在更新SDK之后,进入Eclipse设置Android SDK目录的时候,会突然说我的版本低什么的,尝试自己解决但失败之后,我在搜索引擎上找了很多中文的资料,但都没能找到真正解决问题的方法,几个小时之后,我放弃了,于是翻出去用英文找了一下,果然马上就找到解决方法了!对此我有几个疑问:1.国内的开发都停在低版本的系统上吗?2.国内开发不更新SDK吗?3国内就没有资料可共享或用来探讨一下解决

为Eclipse安装ADT(Android Development Tools)

在搭建Android开发环境的时候,我们需要为Eclipse安装ADT(Android Development Tools)插件,这个插件可以为用户提供一个强大的Android集成开发环境.通过给Eclipse安装ADT插件,用户才能够完成快速新建Android项目.创建界面.调试程序.导出apk等一系列的开发任务. 一般论坛或博客上关于Android开发环境搭建的帖子在讲Eclipse安装ADT插件的时候,都是通过在线安装的方式.不过这种方法有几大缺陷,一是由于ADT插件是从http://dl

Eclipse中一直出现 Android SDK resolving error markers

Eclipse中一直出现“Android SDK: resolving error markers”. 此类情况网上有诸多描述以及相应尝试性的解决方法,不久前本人即出现此类情况,尝试多种方案后未能解决.最终方法如下: 删除此文件,workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi,重启Eclipse即可.