一种控件创建方法、装置、设备及介质
文献发布时间:2023-06-19 19:28:50
技术领域
本发明涉及软件开发技术领域,具体涉及一种控件创建方法、装置、设备及介质。
背景技术
随着智能网联汽车的发展,基于安卓(Android)操作系统的车机越来越普及。车载系统对Android本地服务(Native)层的渲染要求越来越多,界面样式的变更也较为频繁。控件包括如按钮,文本框,列表等等可以供用户界面操控的组件,Android系统本身是自带一套控件系统,但实现是在应用框架(Framework)层,对于更下一层的Native层是无法使用的,在Android系统Native层没有可用的控件系统,如果引用一些桌面程序常用的界面库还存在大量移植性问题,因此需要自行实现所有的控件,便无法适应多变的界面变更和需求变化。
发明内容
鉴于以上所述现有技术的缺点,本发明提供一种控件创建方法、装置、设备及介质,能在Native层实现控件创建的方法,以解决上述技术问题。
本发明提供的一种控件创建方法,包括:
获取XML文件并解析,得到所述XML文件中的所有节点及配置信息;
对所述节点进行解析,对应生成控件和容器控件的程序对象;
接收绘制指令并处理,得到绘制消息并发送至所述程序对象;
所述程序对象根据绘制消息在所述配置信息中确定绘制内容;
绘制控件界面。
于本发明的一实施例中,所述获取XML文件并解析,得到所述XML文件中的所有节点及配置信息的步骤包括:
获取所述XML文件并读取所述XML文件的字符串;
查询所述字符串中的所有所述节点及所述配置信息并保存。
于本发明的一实施例中,所述对所述节点进行解析,对应生成控件和容器控件的程序对象的步骤包括:
确定所述节点之间的映射关系;
根据所述映射关系将所述节点对应生成携有所述配置信息的控件和容器控件的所述程序对象。
于本发明的一实施例中,所述确定所述节点之间的映射关系的步骤包括:
在所述节点中查找根节点和所述根节点的第一子节点,并保存所述根节点和所述第一子节点的第一映射关系;
查找所述第一子结点内部的第二子节点,并保存所述第一子结点和第二子节点的第二映射关系;
循环查询所述节点直至结束。
于本发明的一实施例中,所述程序对象根据绘制消息在所述配置信息中确定绘制内容的步骤包括:
所述程序对象中的所述控件和所述容器控件根据所述绘制消息检查自身所述配置信息中的属性;
所述控件和所述容器控件根据所述属性在所述配置信息中确定对应的所述绘制内容。
于本发明的一实施例中,所述控件和所述容器控件根据所述绘制消息检查自身所述配置信息中的属性的步骤包括:
所述程序对象中所述根节点的所述容器控件接收所述绘制消息后,根据所述绘制消息检查自身所述配置信息中的所述属性,并将所述绘制消息传递给所述第一子结点的所述控件或所述容器控件;
所述第一子结点的所述控件或所述容器控件接收所述绘制消息后,检查自身所述配置信息中的所述属性,并将所述绘制消息传递给所述第二子结点的所述控件或所述容器控件;
依次传递直至结束。
于本发明的一实施例中,所述属性包括:可见性和触摸状态。
于本发明的一实施例中,所述绘制内容包括:控件宽高坐标、控件背景颜色或图片的资源标识和控件文字字符串及对应坐标。
于本发明的一实施例中,所述方法还包括:
获取触摸事件;
对所述触摸事件进行解析得到触摸消息并发送至所述程序对象;
所述程序对象中的所述控件根据所述触摸消息改变所述触摸状态并实现所述控件的功能。
为实现上述目的及其他相关目的,本发明还提供一种控件创建装置,包括:
获取模块,用于获取XML文件并解析,以得到所述XML文件中的所有节点及配置信息;
解析模块,用于对所述节点进行解析,对应生成控件和容器控件的程序对象;
指令处理模块,接收绘制指令并处理,得到绘制消息并发送至所述程序对象;
内容确定模块,所述程序对象根据绘制消息在所述配置信息中确定绘制内容;
绘制模块,绘制控件界面。
为实现上述目的及其他相关目的,本发明还提供一种电子设备,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现所述控件创建方法。
为实现上述目的及其他相关目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被计算机的处理器执行时,使计算机执行所述控件创建方法。
本发明的有益效果:本发明对Native层提供一种控件创建方法,当调用方需要使用控件时,只需要在XML文件中配置,主要决定控件样式,控件间的摆放关系,控件的功能以及其他配置,之后程序会自行加载XML文件进行解析创建控件和容器控件,根据XML文件里的配置信息进行样式设置,最后对需要显示的内容进行绘制。本发明可以提高Android系统对Native层的界面开发效率,不用重新开发控件,避免了单独开发的控件之间的冲突。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明的实施例所提供的控件创建方法的应用场景示意图;
图2是本发明的实施例所提供的控件创建方法的具体流程图;
图3是本发明的实施例所提供的控件创建方法的布局界面示意图;
图4是本发明的实施例所提供的控件创建装置的功能模块框图;
图5是本发明的实施例所提供的电子设备的结构框图。
具体实施方式
以下将参照附图和优选实施例来说明本发明的实施方式,本领域技术人员可由本说明书中所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。应当理解,优选实施例仅为了说明本发明,而不是为了限制本发明的保护范围。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
在下文描述中,探讨了大量细节,以提供对本发明实施例的更透彻的解释,然而,对本领域技术人员来说,可以在没有这些具体细节的情况下实施本发明的实施例是显而易见的,在其他实施例中,以方框图的形式而不是以细节的形式来示出公知的结构和设备,以避免使本发明的实施例难以理解。
首先需要说明的是,Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,具有开放性、平等性、无界性、方便性和硬件的丰富性等特点。Android系统分4层:java应用程序、java框架、本地框架和java运行环境、Linux内核空间。Java应用程序可以理解为各个应用程序,由Java语言实现;Java框架层就是常说的Framework,这层里东西很多也很复杂,比如说主要的一些系统服务,编写Android代码之所以能够正常识别和动作,都要依赖这一层的支持,这一层也是由Java语言实现;Native层这部分常见一些本地服务和一些链接库等,这一层的一个特点就是通过C和C++语言实现;比如我们现在要执行一个复杂运算,如果通过java代码去实现,那么效率会非常低,此时可以选择通过C或C++代码去实现,然后和上层的Java代码通信,这部分在android中称为JNI(Java Native Interface,Java本地接口)机制,又比如我们的设备需要运行,那么必然要和底层的硬件驱动交互,也要通过Native层。Linux内核空间这部分顾名思义,就是内核部分。
控件是指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能、控件创建过程包括设计、开发、调试工作,然后是控件的使用。
图1是本发明的实施例所提供的控件创建方法的应用场景示意图,该场景中,调用方配置XML文件后,通过本控件创建方法建立如图1所示对应的控件和容器控件并保存,将调用方需要的界面进行绘制呈现。本发明提供一套方法给开发者或者设计人员进行调用,他只需要把希望呈现的界面和功能通过XML文件表达出来即可,而不需要去调用操作系统提供的底层API(Application Programming Interface,应用程序编程接口)。
本发明应用于控件系统,包括解析模块、控件模块、渲染模块、触摸模块;解析模块,用于加载XML文件并解析,根据所述XML文件创建对应的控件或容器控件,并将配置信息设置到所述控件或所述容器控件中,还用于加载所述配置信息中的资源并将生成的资源标识设置到所述配置信息中;控件模块,用于对绘制指令进行处理,决定所述控件或所述容器控件是否被触摸及是否要响应,并记录所述控件或所述容器控件当前所述触摸状态;渲染模块,用于根据所述控件或所述容器控件的绘制内容进行绘制控件界面;触摸模块,用于对触摸事件进行解析,并将解析后的所述触摸状态发送至所述控件模块。
图2是本发明的实施例所提供的控件创建方法的具体流程图。该方法可以应用于图1所示的实施环境,应理解的是,该方法也可以适用于其它的示例性实施环境,并由其它实施环境中的设备具体执行,本实施例不对该方法所适用的实施环境进行限制。
如图2所示,在一示例性的实施例中,控件创建方法至少包括步骤S201至步骤S205,详细介绍如下:
步骤S201:获取XML文件并解析,得到所述XML文件中的所有节点及配置信息。
在一实施例中,该步骤包括:获取所述XML文件并读取所述XML文件的字符串;查询所述字符串中的所有所述节点及所述配置信息并保存。
具体地,调用方需要使用控件时,只需要在XML文件中配置,主要决定使用何种功能控件、控件间的摆放关系、控件样式及其他,之后控件系统会通过解析模块自行加载XML文件并读取文件流生成对应的字符串,然后划分一块内存进行保存;在字符串里面匹配或者查询树形结构的所有节点并保存;加载配置信息需要的资源,为了防止资源的重复加载,会将加载的资源生成其唯一ID以及索引表进行动态管理并保存。
步骤S202:对所述节点进行解析,对应生成控件和容器控件的程序对象。
在一实施例中,该步骤包括:确定所述节点之间的映射关系;根据所述映射关系将所述节点对应生成携有所述配置信息的控件和容器控件的所述程序对象。
在一实施例中,该步骤还包括:在所述节点中查找根节点和所述根节点的第一子节点,并保存所述根节点和所述第一子节点的第一映射关系;查找所述第一子结点内部的第二子节点,并保存所述第一子结点和第二子节点的第二映射关系;循环查询所述节点直至结束。
具体地,在保存的所有节点中查找根节点,然后查询其内部的第一子节点并进行保存,同时保存第一映射关系到内存;依次查询第一子节点内部是否还有第二子节点,如有则继续保存第二映射关系到内存;当查询到所有子节点已经没有内部节点,则取出所有节点和对应映射关系,通过解析模块一一对应创建控件和容器控件,并将配置信息设置到控件和容器控件中生成程序对象;其中,第一子结点和第二子节点及其内部节点包括至少一个节点;生成的程序对象通过控件模块进行管理;所有要绘制的元素,容器控件、文本控件、按钮、音源容器控件在抽象概念上都称为控件,不同的控件有不同的功能,容器控件主要用于将控件进行分组(实际作用比如容器控件本身区域内贴背景颜色或图片),文本控件主要用于展示文字但不带触摸,按钮主要作为按钮既展示文字也带触摸等等。
步骤S203:接收绘制指令并处理,得到绘制消息并发送至所述程序对象。
具体地,绘制消息是由本发明框架库提供,绘制是一直进行的,比如一秒钟会执行30次,每次接收到绘制指令控件模块都会去遍历,如果没有XML文件生成对应的程序对象,那么便不执行该绘制指令,如果有就执行绘制。控件模块需要负责决定绘制何物和绘制何处的问题,如按下按钮时和抬起时绘制的对象(背景纹理)会发生变化或按钮在屏幕上的绘制坐标等等。控件模块接收绘制指令后生成绘制消息发送至程序对象。
步骤S204:所述程序对象根据绘制消息在所述配置信息中确定绘制内容;
在一实施例中,该步骤包括:所述程序对象中的所述控件和所述容器控件根据所述绘制消息检查自身所述配置信息中的属性;所述控件和所述容器控件根据所述属性在所述配置信息中确定对应的所述绘制内容。
在一实施例中,该步骤还包括:所述程序对象中所述根节点的所述容器控件接收所述绘制消息后,根据所述绘制消息检查自身所述配置信息中的所述属性,并将所述绘制消息传递给所述第一子结点的所述控件或所述容器控件;所述第一子结点的所述控件或所述容器控件接收所述绘制消息后,检查自身所述配置信息中的所述属性,并将所述绘制消息传递给所述第二子结点的所述控件或所述容器控件;依次传递直至结束。
在一实施例中,所述属性包括:可见性和触摸状态。
在一实施例中,所述绘制内容包括:控件宽高坐标、控件背景颜色或图片的资源标识和控件文字字符串及对应坐标。
具体地,程序对象中根节点的容器控件接收到绘制消息后,根据绘制消息检查自身配置信息中的可见性和触摸状态是按下或是抬起,若可见,需要根据不同的触摸状态确定绘制内容即配置信息中自己的宽高坐标、对应的背景图或颜色的资源标识、文字字符串及对应的坐标并传入绘制模块,若不可见,则不用进行绘制,然后将绘制消息传递给第一子结点的控件或容器控件;同理,第一子结点的控件或容器控件接收绘制消息后,根据绘制消息检查自身配置信息中的可见性和触摸状态是按下或是抬起,若可见,需要根据不同的触摸状态确定绘制内容即配置信息中自己的宽高坐标、对应的背景图或颜色的资源标识、文字字符串及对应的坐标并传入绘制模块,若不可见,则不用进行绘制,然后将绘制消息传递给第二子结点的控件或容器控件;依次传递进行检查及发送绘制内容直至子节点没有内部节点,程序对象内绘制信息传递结束。
步骤S205:绘制控件界面。
具体地,绘制模块程序对象发送的控件或容器控件的绘制内容,使用图形API进行具体的绘制操作,具体包括画布的初始化,着色器的创建,纹理的生成和绘制,文字的生成和绘制等等。
在一实施例中,该方法还包括:获取触摸事件;对所述触摸事件进行解析得到触摸消息并发送至所述程序对象;所述程序对象中的所述控件根据所述触摸消息改变所述触摸状态并实现所述控件的功能。
具体地,当使用者触摸控件界面时,会通过触摸模块对触摸事件进行解析,将触摸事件解析为TOUCH_DOWN(按下),TOUCH_MOVE(移动),TOUCH_UP(抬起),OTHER(其他)四种事件传递给控件模块进行后续处理。触摸模块也可以提供另一种模式,即由调用方将触摸事件按照按下,移动,抬起和其他的格式传入触摸模块,而触摸模块本身不会再自行解析驱动侧的触摸事件。控件模块负责决定控件是否被触摸到,是否要响应,生成触摸消息发送至所述程序对象,并记录当前的按压状态供绘制处理时使用;程序对象中的控件根据触摸消息改变触摸状态并实现控件的功能。
最终调用方调用本方法以呈现的控件界面可参照附图3所提供的一种具体实施例行车记录仪(Dvr)开始记录(CAME)、相册(ALBUM)和设置(SETTING)控件的布局界面示意图。
控件模块还可以用于给调用方回调当前控件的内部状态,如点击事件发生后通知给调用方,调用方进行处理自身的业务,还可以在按下某个控件时,需要发出提示音时调用android系统的多媒体播放器进行提示音播放,同时也支持回调给调用方自行发声。
图4是本发明的实施例所提供的控件创建方法的功能模块框图,该装置可以应用于图1所示的实施环境。该装置也可以适用于其它的示例性实施环境,并具体配置在其它设备中,本实施例不对该装置所适用的实施环境进行限制。
如图4所示,该装置包括获取模块401、解析模块402、指令处理模块403、内容确定模块404和绘制模块405;
所述获取模块401,用于获取XML文件并解析,以得到所述XML文件中的所有节点及配置信息;
所述解析模块402,用于对所述节点进行解析,对应生成控件和容器控件的程序对象;
所述指令处理模块403,接收绘制指令并处理,得到绘制消息并发送至所述程序对象;
所述内容确定模块404,所述程序对象根据绘制消息在所述配置信息中确定绘制内容;
所述绘制模块405,绘制控件界面。
该装置的模块可包含上述控件创建方法的所有技术特征,并且使用方法一一对应。需要说明的是,上述实施例所提供的控件创建方法的装置与上述实施例所提供的控件创建方法的方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。上述实施例所提供的控件创建方法的装置在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能,本处也不对此进行限制。
本申请的实施例还提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现上述各个实施例中提供的控件创建方法。
图5示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。需要说明的是,图5示出的电子设备的计算机系统500仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(Central Processing Unit,CPU)501,其可以根据存储在只读存储器(Read-Only Memory,ROM)502中的程序或者从储存部分508加载到随机访问存储器(Random Access Memory,RAM)503中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM503中,还存储有系统操作所需的各种程序和数据。CPU501、ROM502以及RAM503通过总线504彼此相连。输入/输出(Input/Output,I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分507;包括硬盘等的储存部分508;以及包括诸如LAN(Local Area Network,局域网)卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入储存部分508。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
本申请的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被计算机的处理器执行时,使计算机执行如前所述的控件创建方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
本申请的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例中提供的控件创建方法。
上述实施例仅示例性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,但凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
- 一种存储池创建方法、装置、设备及可读存储介质
- 一种存储快照创建方法、装置、设备及存储介质
- 一种快照创建方法、装置、设备及可读存储介质
- 一种可写快照的创建方法、装置、系统、设备及存储介质
- 视图控件的绘制方法、装置、计算机设备及可读存储介质
- 控件创建方法、装置、设备及存储介质
- 列表控件的创建方法、装置、设备及可读存储介质