Android的一个BindView工具的实现

2024-06-24 10:18
文章标签 工具 实现 android bindview

本文主要是介绍Android的一个BindView工具的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于Android已经有很多Bind View的工具了,大多都是使用了反射和注解的方法。那么如何实现一个简易的代码生成工具呢?其实不难,只要会写代码都可以试试。这些天,我试了一下,并将它做成了工具。代码如下:

package com.example;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** Created by owant on 2016/8/4.*/
public class BindViewTool {public static String xmlPath = "F:\\MyWorkAS\\NewHome\\app\\src\\main\\res\\layout\\activity_main.xml";//第一个是类型,第二个是名字public static String formatValue = "private {0} {1};";//第一个是变量,第二是类型,第三个是IDpublic static String formatBind = "{0}=({1})findViewById(R.id.{2});";public static void main(String[] arg) {//读取文件try {String path="";path=arg[0];if(path.length()<0){System.out.println("请输入文件路径");return;}BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(path)));StringBuffer context = new StringBuffer();String line;String startLine = "";String endLine = "";while ((line = bufferedReader.readLine()) != null) {if (line.trim().length() > 0) {//进入<if (line.trim().startsWith("<") && !line.trim().startsWith("</")) {startLine = line.trim();}//如果已经进入了<,进行查找Idif (startLine.length() > 0) {if (line.indexOf("android:id=\"@+id/") > 0) {endLine = line.trim();context.append(startLine.trim()).append("&&");context.append(endLine.trim()).append("&&");startLine = "";endLine = "";}}}}String contextValue = context.toString();contextValue = contextValue.substring(0, contextValue.length() - "&&".length());String[] splits = contextValue.split("&&");int length = splits.length;List<String> variables = new ArrayList<String>();List<String> binds = new ArrayList<String>();for (int i = 0; i < length; i = i + 2) {String type = splits[i].replace("<", "");if (type.lastIndexOf(".") > 0) {type = type.substring(type.lastIndexOf(".")+1, type.length());}String id = splits[i + 1].substring("android:id=\"@+id/".length(), splits[i + 1].length() - 1);// public static String formatValue = "private {0} {1}";String value = formatValue.replace("{0}", type);value = value.replace("{1}", id);variables.add(value);//public static String formatBind = "{0}=({1})findViewById(R.id.{2})";String bind = formatBind.replace("{0}", id);bind = bind.replace("{1}", type);bind = bind.replace("{2}", id);binds.add(bind);}System.out.println();System.out.println();for (String var : variables) {System.out.println(var);}System.out.println();System.out.println();for (String b : binds) {System.out.println(b);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

简单分析一下,就是进行一下的判断,就是在AndroidStudio格式化代码后,进行这样的分析:

1.读取文件的一行;
2.如果是”<”开始的进行获取(A);
3.如果是有”android:id=”@+id/”,进行获取(A)
4.之后进行(A)的出来,如果进入”<”并且下一行时”android:id=”@+id/”,那么就是一个Bind View的必要条件
5.之后整理

最后的工具生成后运行效果如下:

对于如何生存jar大家可以参考我的上一篇文章进行操作。
下载路径 http://download.csdn.net/detail/u012131702/9597057

这篇关于Android的一个BindView工具的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089867

相关文章

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

mybatis用拦截器实现字段加解密全过程

《mybatis用拦截器实现字段加解密全过程》本文通过自定义注解和MyBatis拦截器实现敏感信息加密,处理Parameter和ResultSet,确保数据库存储安全且查询结果解密可用... 目录前言拦截器的使用总结前言根据公司业务需要,灵活对客户敏感信息进行加解密,这里采用myBATis拦截器进行简单实

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

Python实现开根号的五种方式

《Python实现开根号的五种方式》在日常数据处理、数学计算甚至算法题中,开根号是一个高频操作,但你知道吗?Python中实现开根号的方式远不止一种!本文总结了5种常用方法,感兴趣的小伙伴跟着小编一起... 目录一、为什么需要多种开根号方式?二、5种开根号方式详解方法1:数学库 math.sqrt() ——

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把