iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中实现自动生成布局View的初始化代码方法
  • 183
分享到

Android中实现自动生成布局View的初始化代码方法

自动view方法初始化Android 2022-06-06 10:06:08 183人浏览 独家记忆
摘要

在Android开发过程中,界面布局是及其重要的,但同时也是复杂。有的时候我们急于实际运行查看布局效果。但是android的编译速度我实在不想吐槽啥,尤其在布局越来越复杂,项目

Android开发过程中,界面布局是及其重要的,但同时也是复杂。有的时候我们急于实际运行查看布局效果。但是android的编译速度我实在不想吐槽啥,尤其在布局越来越复杂,项目越来越大,资源文件越来越多的情况下。

尤其是是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("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;
    
   
    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中RecyclerView布局代替GridView实现类似支付宝的界面Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享android动态布局之动态加入TextView和ListView的方法Android布局自定义Shap圆形ImageView可以单独设置背景与图片Android中ListView Item布局优化技巧Android RecyclerView加载不同布局简单实现Android ListView添加头布局和脚布局实例详解Android自定义ViewGroup之实现FlowLayout流式布局探究Android中ListView复用导致布局错乱的解决方案Android View 布局流程(Layout)全面解析


--结束END--

本文标题: Android中实现自动生成布局View的初始化代码方法

本文链接: https://www.lsjlt.com/news/26980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中协调滚动布局的实现代码
    目录使用 AppbarLayout 和 MotionLayout 实现常用的布局效果一、AppbarLayout + ViewPager二、AppbarLayout + Recycl...
    99+
    2024-04-02
  • python实现自动生成C++代码的代码生成器
    遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以轻松搞定...
    99+
    2024-04-02
  • python怎么实现自动生成C++代码的代码生成器
    这篇文章主要讲解了“python怎么实现自动生成C++代码的代码生成器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么实现自动生成C++代码的代码生成器”吧!遇到的问题工作中遇...
    99+
    2023-07-02
  • 自定义golang函数实现的代码生成和自动化
    在 go 中,可通过创建自定义函数来实现代码生成和自动化。代码生成函数接收参数列表,返回生成的代码和一个 error。自动化函数使用格式化的输出自动执行任务,接收参数列表并返回一个 er...
    99+
    2024-04-27
    git golang
  • Android自定View实现滑动验证效果的代码
    效果图 自定义属性代码 <?xml version="1.0" encoding="utf-8"?> <resources> &...
    99+
    2024-04-02
  • mybatis根据表逆向自动化生成代码的实现
    目录1.引入插件2.修改generatorConfig.xml文件3.运行插件,生成代码.personSunflowerP { background: rgba(51, 153, 0...
    99+
    2024-04-02
  • Kotlin+Flow实现Android应用初始化任务启动库的方法
    这篇文章将为大家详细讲解有关Kotlin+Flow实现Android应用初始化任务启动库的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。特性Kotlin + Flow 实现的 Android 应用初始...
    99+
    2023-06-14
  • java代码自动生成的方法是什么
    在Java中,有各种工具和框架可以用于生成代码。其中最常见的是使用代码生成工具,如MyBatis Generator和Apache ...
    99+
    2024-02-29
    java
  • oracle自动生成uuid的实现方法
    目录oracle自动生成uuid方法1.创建一个表2.生成uuid的语句3.添加几条数据,查询就可以看到效果oracle获取UUID乱码oracle自动生成uuid方法 1.创建一个表 create table t_us...
    99+
    2024-04-02
  • Java生成序号】实现自动编号的方法及代码详解
    Java生成序号】实现自动编号的方法及代码详解 在Java编程中,生成序号是一项常见的需求,无论是用于数据标识、列表展示还是生成唯一的标识符。本文将介绍如何使用Java语言实现自动编号的功能,并提供详...
    99+
    2023-10-22
    java 开发语言 Java
  • 基于Android在布局中动态添加view的两种方法(总结)
    一、说明 添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写二、前言说明1.构造xml文件2.LayoutInflater提到addview,首先要了解一下LayoutInflater类。这个类最主要的...
    99+
    2023-05-30
    android 动态添加 view
  • ASP.NET Core中间件初始化的实现方法
    小编给大家分享一下ASP.NET Core中间件初始化的实现方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言  在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,...
    99+
    2023-06-15
  • jenkins配置golang 代码工程自动发布的实现方法
    目录前沿一、在jenkins宿主机上配置go环境;1、安装go;2、配置环境变量3、验证环境是否可用二、jenkis上配置项目1、jks上新建项目2、“源码管理&rdqu...
    99+
    2024-04-02
  • springboot中项目启动时实现初始化方法加载参数
    目录springboot项目启动,初始化方法加载参数1.@PostConstruct说明2.@PreDestroy说明第一种:注解@PostConstruct第二种:实现Comman...
    99+
    2024-04-02
  • 中项目启动时实现初始化方法的加载参数是什么
    中项目启动时实现初始化方法的加载参数是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot项目启动,初始化方法加载参数今天我看到项目中用到了 ...
    99+
    2023-06-22
  • Mybatis Generator自动生成对应文件的实现方法
     使用Generator自动生成我们需要的bean dao mapper xml等文件的过程(没有借助eclipse等编辑工具直接命令提示符生成)在E盘新建一个文件夹generator,在这文件夹下创建一个test文件夹用来存放生...
    99+
    2023-05-31
    mybatis generator rat
  • SonarQube实现自动化代码扫描的安装及使用集成方式
    目录1、安装Findbugs插件2、IDEA集成3、Gitlab集成4、Jenkins集成1、安装Findbugs插件 Sonar有自己的默认的扫描规则,可通过安装Findbugs插...
    99+
    2024-04-02
  • 用Python代码自动生成文献的IEEE引用格式的实现
    今天尝试着将引用文献的格式按照IEEE的标准重新排版,感觉手动一条一条改太麻烦,而且很容易出错,所以尝试着用Python写了一个小程序用于根据BibTeX引用格式来生成IEEE引用格...
    99+
    2024-04-02
  • SpringBoot集成Mybatis-plus并实现自动生成相关文件的示例代码
    Mybatis-Plus是一个优秀的Mybatis增强工具,目前更新到3.1.1。Mybatis-Plus原生提供了很多单表操作的方法,极大简化了繁琐的curd的操作,同时又支持xm...
    99+
    2024-04-02
  • Java项目中和实现自动生成一个构造方法
    这篇文章给大家介绍Java项目中和实现自动生成一个构造方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java中自动生成构造方法详解每个类在没有声明构造方法的前提下,会自动生成一个不带参数的构造方法,如果类一但声明有...
    99+
    2023-05-31
    java 自动生成 构造方法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作