CN111176640B - Android工程中布局层级展现方法、存储介质、设备及系统 - Google Patents
Android工程中布局层级展现方法、存储介质、设备及系统 Download PDFInfo
- Publication number
- CN111176640B CN111176640B CN201811346349.5A CN201811346349A CN111176640B CN 111176640 B CN111176640 B CN 111176640B CN 201811346349 A CN201811346349 A CN 201811346349A CN 111176640 B CN111176640 B CN 111176640B
- Authority
- CN
- China
- Prior art keywords
- layout
- character strings
- files
- labels
- sub
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种Android工程中布局层级展现方法、存储介质、设备及系统,涉及Android开发领域,该方法包括获取工程项目中包含布局文件的目录;筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;将字符串中布局标签外的字符替换为设定字符,布局标签的字符替换为设定数字,形成数字码;使用数字码的每个数字做递归操作,计算出布局的最深层级。当布局中包含子布局时,首先计算出子布局的层级,然后计算出子布局所属布局的层级,将所有子布局的最深层级和所有子布局所属的布局的最深层级相比较,取最大的层级作为整个布局的最深层级。本发明能够很方便的计算出布局的层级情况。
Description
技术领域
本发明涉及Android开发领域,具体涉及一种Android工程中布局层级展现方法、存储介质、设备及系统。
背景技术
Android开发中经常遇到会界面过度绘制的问题,过度绘制跟界面布局的层数太多有关,如果不处理会造成界面卡顿,但是一个成熟的Android项目通过有上千个布局。当前,开发安卓程序的工作环境中含分析布局文件的工具Hierarchy Viewer,该工具本身可以清晰地展示布局的层级,但是该工具只能同时检查一个布局的层级,无法同时分析所有的布局,而且该工具也无法第一时间告知开发者布局的最深层级是多少。
因此,当开发者需要找出某个模块内层级过多的布局,尤其是整个庞大的项目里所有层级过深的布局时,安卓开发环境自带的工具就无法高效的帮助开发者实现这一任务。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种Android工程中布局层级展现方法,能够很方便的计算出布局的层级情况。本发明还提供了相应的存储介质、电子设备和Android工程中布局层级展现系统。
本发明第一方面提供一种Android工程中布局层级展现方法,包括以下步骤:
获取工程项目中包含布局文件的目录;
筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
使用数字码的每个数字做递归操作,计算出布局的最深层级。
结合第一方面,在第一种可能的实现方式中,所述获取工程项目中包含布局文件的目录,具体步骤为:
S101:采用javaGUI方式获取工程目录;
S102:获取工程目录下带有src目录的子目录集合,得到包含布局文件的目录。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述筛选出目录中的布局文件,具体为:
S201:根据正则表达式从目录中匹配出布局文件集合;
S202:根据正则表达式从布局文件集合中匹配出所有布局文件,所述布局文件为xml文件。
结合第一方面,在第三种可能的实现方式中,
所述布局标签的字符包括三种类型;
每种类型的布局标签的字符使用一种数字替换。
结合第一方面,在第四种可能的实现方式中,当布局中包含子布局时,首先计算出子布局的层级,然后计算出子布局所属布局的层级,将所有子布局的最深层级和所有子布局所属的布局的最深层级相比较,取最大的层级作为整个布局的最深层级。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,当子布局还包含子布局时,首先计算不再包含子布局的子布局的层级,再计算该子布局所属的上一层布局的层级,以此类推,计算所有布局的层级,然后将最深层级作为整个布局的最深层级。
本发明第二方面提供一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取工程项目中包含布局文件的目录;
筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
使用数字码的每个数字做递归操作,计算出布局的最深层级。
本发明第三方面提供一种电子设备,所述电子设备包括:
获取单元,其用于获取工程项目中包含布局文件的目录;
筛选单元,其用于筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
替换单元,其用于将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
计算单元,其用于使用数字码的每个数字做递归操作,计算出布局的最深层级。
结合第三方面,在第一种可能的实现方式中,所述获取工程项目中包含布局文件的目录,具体步骤为:
S101:采用javaGUI方式获取工程目录;
S102:获取工程目录下带有src目录的子目录集合,得到包含布局文件的目录。
结合第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述筛选出目录中的布局文件,具体为:
S201:根据正则表达式从目录中匹配出布局文件集合;
S202:根据正则表达式从布局文件集合中匹配出所有布局文件,所述布局文件为xml文件。
结合第三方面,在第三种可能的实现方式中,
所述布局标签的字符包括三种类型;
每种类型的布局标签的字符使用一种数字替换。
本发明第四方面提供一种Android工程中布局层级展现系统,包括:
获取模块,其用于获取工程项目中包含布局文件的目录;
筛选模块,其用于筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
替换模块,其用于将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
计算模块,其用于使用数字码的每个数字做递归操作,计算出布局的最深层级。
结合第四方面,在第一种可能的实现方式中,所述布局标签的字符包括三种类型,所属替换模块对每种类型的布局标签的字符使用一种数字替换。
结合第四方面,在第一种可能的实现方式中,当布局中包含子布局时,首先计算出子布局的层级,然后计算出子布局所属布局的层级,将所有子布局的最深层级和所有子布局所属的布局的最深层级相比较,取最大的层级作为整个布局的最深层级。
结合第四方面的第一种可能的实现方式,在第二种可能的实现方式中,当子布局还包含子布局时,首先计算不再包含子布局的子布局的层级,再计算该子布局所属的上一层布局的层级,以此类推,计算所有布局的层级,然后将最深层级作为整个布局的最深层级。
与现有技术相比,本发明的优点在于:通过获取工程项目中包含布局文件的目录,然后筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串,将字符串中布局标签外的字符替换为设定字符,布局标签的字符替换为设定数字,形成数字码,最后使用数字码的每个数字做递归操作,以此来计算出布局的最深层级,即使绘制层很多的情况,也能很方便的得出布局的层级情况,便于分析,简单而高效。
附图说明
图1为本发明实施例中一种Android工程中布局层级展现方法的流程图;
图2为本发明实施例中一种电子设备的结构示意图。
具体实施方式
本发明实施例提供了一种Android工程中布局层级展现方法,通过遍历并解析所有布局文件,计算得出布局中的最深层级数。本发明实施例还相应地提供了存储介质、设备及Android工程中布局层级展现系统。
以下结合附本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1所示,本发明实施例提供的一种Android工程中布局层级展现方法的一实施例包括:
S1:获取工程项目中包含布局文件的目录;
本发明实施例中,Android工程在开发的过程中,单个应用的工程项目一般由多个目录组成,然后目录中包含各式各样的文件,目录也可能包含子目录,子目录中也包含各式各样的文件,基于布局文件才能分析出布局的层级,因此需要先获取工程项目中包含布局文件的所有目录。
S2:筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
本发明实施例中,因为工程项目中的某些目录下不包含布局文件,因此需要通过筛选的方式将目录中的布局文件筛选出来,以便于层级的分析,然后将筛选出的布局文件读取为字符串的形式。
本发明实施例中,将布局文件读取为字符串,具体实现过程为:Java语言有专属的方法把文件内容按顺序拼接成一个字符串,布局文件的内容都是xml标签,我们使用Java方法可以把所有出现的标签按顺序拼接在一起,再利用正则表达式检测出一些字符串里我们不需要的字符,最终得到一个精简的字符串,方便后期转义成数字码进行层级计算。以下结合一实例对该转化过程进行具体说明。
假设一布局文件的内容为:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android'
android:layout_width="match_parent"
android:1ayout _height="match parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/a"
android:layout_width="match parent"
android:1ayout_height="wrap_content"
android:background="@color/background black">
<android.support.v4.view.ViewPager
android:paddingTop="8dp"
android:background="@color/background_black"
android:id="@+id/b"
android:1ayout_width="match _parent"
android:layout_height="match parent"/>
</FrameLayout>
</LinearLayout>
首先剔除每个<>标签里面的属性,例如android:id=”@+id/…”,android:layout_width=”…”等子字符串,这里使用正则表达式找到符合这种类型的子字符串然后用“”进行替换,java语言中有专门方法用于实现上述替换,对于此种类型使用如下正则表达式实现过滤:
\W+\\s*\\:\\S*\\W+\\S*\\=\\S*\"[\\s\\S]*\"
进行上述替换操作后,布局文件变为:
<LinearLayout
>
<FrameLayout
>
<android.support.v4.view.ViewPager
/>
</FrameLayout>
</LinearLayout>
最后将换行字符也去除,布局文件变为:
<LinearLayout><FrameLayout><android.support.v4.view.ViewPager/></FrameLayout></LinearLayout>
至此,便实现了将布局文件读取为字符串。
S3:将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码。
本发明实施例中,布局文件包括布局标签和其它内容,而布局标签能够用于进行层级的分析,其为有用信息,因此需要将布局标签挑选出进行使用。
本发明实施例中,布局标签的字符包括三种类型,类型格式为<XXX>、 <XXX/>和</XXX>组成的字符串,其中XXX用以指代具体内容,每种类型的布局标签的字符使用一种数字替换,如<XXX>格式的布局标签使用数字1替换,<XXX/>格式的布局标签使用数字2替换,</XXX>格式的布局标签使用数字3替换,对于字符串中布局标签外的字符,使用设定字符替换,设定字符可以为标点符号,如“”,对布局标签进行上述处理后,布局文件会以一串数字码的形式存在。
S4:使用数字码的每个数字做递归操作,计算出布局的最深层级。即对于数字码,利用每个数字做递归操作算出最深层级,得到每个布局的最深层级,从而对于工程项目而言,即可展现出该工程项目的层级情况。
可选地,在上述图1对应的实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现方法的第一个可选实施例中,获取工程项目中包含布局文件的目录,具体步骤为:
S101:采用javaGUI方式获取工程目录;GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面。通过javaGUI的方式与用户进行交互即可获取工程目录。
S102:获取工程目录下带有src目录的子目录集合,得到包含布局文件的目录。src属性一般用来链接一个URL。
本发明实施例中,src目录下一般存放布局文件,因此只要获取带有src的目录,即可获取到所有的布局文件。
可选地,在上述图1对应的第一个可选的实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现方法的第二个可选实施例中,筛选出目录中的布局文件,具体为:
S201:根据正则表达式从目录中匹配出布局文件集合,具体的为根据正则表达式“layout$” 从目录中匹配出布局文件集合。
S202:根据正则表达式从布局文件集合中匹配出所有布局文件,所述布局文件为xml(Extensible Markup Language,可扩展标记语言)文件。具体的为根据正则表达式“\\.xml$” 从布局文件集合中匹配出所有布局文件。
本发明实施例中,对于匹配查找出的每个布局文件,将其读取成字符串,通过字符串替换的方式,将布局文件里干扰的标签都用设定字符进行替换,比如android:id=”@+id/layout_content”这种类型的数据字符串,替换后使用字符“”表示,而布局标签则使用对应数字表示,最终生成一串数字码,接着用数字码利用每个数字做递归操作算出最深层数。
本发明实施例中,对于布局的最深层级计算,具体实现过程为:
当布局文件读取为字符串后,得到的字符串最终是由<…>、<…/>和</…>这三种标签拼接而成,把这三种标签用三种正则表达式匹配出来并用三种数字替换,对于上述布局文件实例,比如用替换</Linearlayout>这种标签为9,用替换<android.support.v4.view.ViewPager />这种标签为0,替换<LinearLayout>这种标签为1,替换完成后字符串就变成了一串数字码,上文布局文件的实例:<LinearLayout><FrameLayout> <android.support.v4.view.ViewPager/></FrameLayout></LinearLayout>,最终变成11099。
接下来对数字码做遍历算出最深层数。首先设两个变量,一是临时统计层数deepth(初始为0), 另一个是目前最深层数max(初始为1),然后开始遍历数字码的每一个数字,需要说明的是,<…>和</…>这一对类型标签对应一层布局,<…/>对应一层布局,每次遍历数字deepth可能会变化,所以每次遍历结束前deepth需要与max进行对比,如果deepth大于max就把deepth赋值给max;如果遇到1,deepth加1层,表示这里统计到多嵌套了一层;如果遇到9,deepth减1,表示一条层级分支的遍历结束,需开始另一个分支;如果遇到0,在deepth多一层情况下与当前的max对比;如果大于max就把deepth + 1赋值给max;遍历完所有的数字后,max的值就是这个布局的最深层数,即该布局的最深层级。
可选地,在上述图1对应的实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现方法的第三个可选实施例中,当布局中包含子布局时,首先计算出子布局的层级,然后计算出子布局所属布局的层级,对于子布局的计算,相当于将子布局作为一个独立的布局,然后采用上述布局最深层级计算方法进行层级的计算,然后再将子布局所属布局的层级作为独立的布局,然后采用上述布局最深层级计算方法进行层级的计算,将所有子布局的最深层级和所有子布局所属的布局的最深层级相比较,取最大的层级作为整个布局的最深层级。
即先算出不再包含子布局的布局的层级,并进行标记,然后再计算该布局所属布局的层级,然后将最深层级作为工程项目的最终深度。以下结合一实例对本发明的第三个可选实施例进行具体说明。
假如工程项目包括3个布局,分别为A、B和C,其中布局A包含子布局D,则在进行层级计算时,先算出布局D的层级,假设布局D的最深层级为12,计算完布局D的层级后,将12标记在布局A上,然后计算布局A的最深层级,假设布局A的最深层级为10,则布局A的最终最深层级为12,然后计算布局B和布局C的最深层级,假设布局B的最深层级为13,布局C的最深层级为9,则该工程项目的最深层级为13。因为布局A是具有子布局的,在计算的过程中,先行计算的子布局的最深层级会标记在布局A上,而布局A本身会存在一个最深层级,本发明实施例中最终最深层级指的是将布局A子布局最深层级和布局A本身最深层级比较后,对布局A所取的最深层级。
可选地,在上述图1对应的第三个可选实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现方法的第四个可选实施例中,当子布局还包含子布局时,首先计算不再包含子布局的子布局的层级,再计算该子布局所属的上一层布局的层级,以此类推,计算所有布局的层级,然后将最深层级作为整个布局的最深层级。即当工程项目中包含多层子布局时,则按层依次进行计算。以下结合一实例对本发明的第四个可选实施例进行具体说明。
假设工程项目包括3个布局,分别为E、F和G,其中布局E包括子布局H和子布局I,子布局H包括子布局J,因此在进行层级计算时,先计算子布局J的最深层级,假设计算得到的子布局J的最深层级为10,则先将10标记在子布局H上,然后计算子布局H的最深层级,假设子布局H的最深层级为9,则子布局H的最终层级为10,然后计算子布局I的最深层级,假设子布局I的最深层级为11,则将11标记在布局E上,然后计算布局E的最深层级,假设布局E的最深层级为8,则布局E的最终最深层级为11,然后计算布局F和布局G的最深层级,假设布局F的最深层级为7,布局G的最深层级为14,则该工程项目的最深布局为14。即分层进行计算,将该层所有布局中的最深层级作为该层的最深层级,逐层计算,依次类推,计算出工程项目的最深层级。
本发明实施例的Android工程中布局层级展现方法,通过获取工程项目中包含布局文件的目录,然后筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串,将字符串中布局标签外的字符替换为设定字符,布局标签的字符替换为设定数字,形成数字码,最后使用数字码的每个数字做递归操作,以此来计算出布局的最深层级,即使绘制层很多的情况,也能很方便的得出布局的层级情况,便于分析,简单而高效。
本发明实施例提供的一种存储介质的一实施例包括:该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取工程项目中包含布局文件的目录;
筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
使用数字码的每个数字做递归操作,计算出布局的最深层级。
可选地,在上述存储介质实施例的基础上,本发明实施例提供的一种存储介质的第一个可选实施例中,存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可选地,在上述存储介质的实施例及第一个可选实施例的基础上,本发明实施例提供的一种存储介质的第二个可选实施例中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可选地,在上述存储介质的实施例及第一、第二个可选实施例的基础上,本发明实施例提供的一种存储介质的第三个可选实施例中,可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
参见图2所示,本发明实施例提供的一种电子设备的一实施例包括:
获取单元,其用于获取工程项目中包含布局文件的目录;
筛选单元,其用于筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
替换单元,其用于将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
计算单元,其用于使用数字码的每个数字做递归操作,计算出布局的最深层级。
本发明实施例中,Android工程在开发的过程中,单个应用的工程项目一般由多个目录组成,然后目录中包含各式各样的文件,目录也可能包含子目录,子目录中也包含各式各样的文件,基于布局文件才能分析出布局的层级,因此需要先获取工程项目中包含布局文件的所有目录。
本发明实施例中,布局标签的字符包括三种类型,类型格式为<XXX>、 <XXX/>和</XXX>组成的字符串,其中XXX用以指代具体内容,每种类型的布局标签的字符使用一种数字替换,如<XXX>格式的布局标签使用数字1替换,<XXX/>格式的布局标签使用数字2替换,</XXX>格式的布局标签使用数字3替换,对于字符串中布局标签外的字符,使用设定字符替换,设定字符可以为标点符号,如“”,对布局标签进行上述处理后,布局文件会以一串数字码的形式存在。
可选地,在上述图2对应的实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现方法的第一个可选实施例中,获取工程项目中包含布局文件的目录,具体步骤为:
S101:采用javaGUI方式获取工程目录;GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面。通过javaGUI的方式与用户进行交互即可获取工程目录。
S102:获取工程目录下带有src目录的子目录集合,得到包含布局文件的目录。src属性一般用来链接一个URL。
本发明实施例中,src目录下一般存放布局文件,因此只要获取带有src的目录,即可获取到所有的布局文件。
可选地,在上述图2对应的第一个可选的实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现方法的第二个可选实施例中,筛选出目录中的布局文件,具体为:
S201:根据正则表达式从目录中匹配出布局文件集合,具体的为根据正则表达式“layout$” 从目录中匹配出布局文件集合。
S202:根据正则表达式从布局文件集合中匹配出所有布局文件,所述布局文件为xml(Extensible Markup Language,可扩展标记语言)文件。具体的为根据正则表达式“\\.xml$” 从布局文件集合中匹配出所有布局文件。
本发明实施例提供的一种Android工程中布局层级展现系统的一实施例包括:
获取模块,其用于获取工程项目中包含布局文件的目录;
筛选模块,其用于筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
替换模块,其用于将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
计算模块,其用于使用数字码的每个数字做递归操作,计算出布局的最深层级。
可选地,在上述一种Android工程中布局层级展现系统对应的实施例的基础上,本发明实施例提供的一种Android工程中布局层级展现系统的第一个可选实施例中,布局标签的字符包括三种类型,所属替换模块对每种类型的布局标签的字符使用一种数字替换。
本发明实施例的Android工程中布局层级展现系统,通过获取工程项目中包含布局文件的目录,然后筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串,将字符串中布局标签外的字符替换为设定字符,布局标签的字符替换为设定数字,形成数字码,最后使用数字码的每个数字做递归操作,以此来计算出布局的最深层级,即使绘制层很多的情况,也能很方便的得出布局的层级情况,便于分析,简单而高效。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (8)
1.一种Android工程中布局层级展现方法,其特征在于,包括以下步骤:
获取工程项目中包含布局文件的目录;
筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
使用数字码的每个数字做递归操作,计算出布局的最深层级;
其中,所述布局标签包括三种类型,类型格式分别为<XXX>、<XXX/>和</XXX>,XXX用以指代具体内容,同种类型的布局标签的字符串使用同一种数字替换,不同类型的布局标签的字符串使用不同数字替换。
2.如权利要求1所述的一种Android工程中布局层级展现方法,其特征在于:所述获取工程项目中包含布局文件的目录,具体步骤为:
S101:采用javaGUI方式获取工程目录;
S102:获取工程目录下带有src目录的子目录集合,得到包含布局文件的目录。
3.如权利要求2所述的一种Android工程中布局层级展现方法,其特征在于:所述筛选出目录中的布局文件,具体为:
S201:根据正则表达式从目录中匹配出布局文件集合;
S202:根据正则表达式从布局文件集合中匹配出所有布局文件,所述布局文件为xml文件。
4.如权利要求1所述的一种Android工程中布局层级展现方法,其特征在于:当布局中包含子布局时,首先计算出子布局的层级,然后计算出子布局所属布局的层级,将所有子布局的最深层级和所有子布局所属的布局的最深层级相比较,取最大的层级作为整个布局的最深层级。
5.如权利要求4所述的一种Android工程中布局层级展现方法,其特征在于:当子布局还包含子布局时,首先计算不再包含子布局的子布局的层级,再计算该子布局所属的上一层布局的层级,以此类推,计算所有布局的层级,然后将最深层级作为整个布局的最深层级。
6.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现以下步骤:
获取工程项目中包含布局文件的目录;
筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
使用数字码的每个数字做递归操作,计算出布局的最深层级;
其中,所述布局标签包括三种类型,分别为起始标签、结束标签,以及非起始标签和结束标签,同种类型的布局标签的字符串使用同一种数字替换,不同类型的布局标签的字符串使用不同数字替换。
7.一种设备,其特征在于,所述设备包括:
获取单元,其用于获取工程项目中包含布局文件的目录;
筛选单元,其用于筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
替换单元,其用于将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
计算单元,其用于使用数字码的每个数字做递归操作,计算出布局的最深层级;
其中,所述布局标签包括三种类型,分别为起始标签、结束标签,以及非起始标签和结束标签,同种类型的布局标签的字符串使用同一种数字替换,不同类型的布局标签的字符串使用不同数字替换。
8.一种Android工程中布局层级展现系统,其特征在于,包括:
获取模块,其用于获取工程项目中包含布局文件的目录;
筛选模块,其用于筛选出目录中的布局文件,并把筛选出的布局文件读取为字符串;
替换模块,其用于将字符串中布局标签外的字符串替换为设定字符,布局标签的字符串替换为设定数字,形成数字码;
计算模块,其用于使用数字码的每个数字做递归操作,计算出布局的最深层级;
其中,所述布局标签包括三种类型,分别为起始标签、结束标签,以及非起始标签和结束标签,同种类型的布局标签的字符串使用同一种数字替换,不同类型的布局标签的字符串使用不同数字替换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811346349.5A CN111176640B (zh) | 2018-11-13 | 2018-11-13 | Android工程中布局层级展现方法、存储介质、设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811346349.5A CN111176640B (zh) | 2018-11-13 | 2018-11-13 | Android工程中布局层级展现方法、存储介质、设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111176640A CN111176640A (zh) | 2020-05-19 |
CN111176640B true CN111176640B (zh) | 2022-05-13 |
Family
ID=70655675
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811346349.5A Active CN111176640B (zh) | 2018-11-13 | 2018-11-13 | Android工程中布局层级展现方法、存储介质、设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111176640B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6635089B1 (en) * | 1999-01-13 | 2003-10-21 | International Business Machines Corporation | Method for producing composite XML document object model trees using dynamic data retrievals |
CA2505370A1 (en) * | 2004-04-26 | 2005-10-26 | Watchfire Corporation | Method and system for website analysis |
CN102708155A (zh) * | 2012-04-20 | 2012-10-03 | 西安电子科技大学 | 基于回溯自动机语法分析的jsax解析器和解析方法 |
CN106951269A (zh) * | 2017-03-31 | 2017-07-14 | 武汉斗鱼网络科技有限公司 | 一种提升安卓应用的布局文件编写效率的方法及系统 |
CN107040818A (zh) * | 2017-03-31 | 2017-08-11 | 武汉斗鱼网络科技有限公司 | 用于安卓电视的布局层级分析方法及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003084987A (ja) * | 2001-09-11 | 2003-03-20 | Internatl Business Mach Corp <Ibm> | Xml文書の妥当性を検証するためのオートマトンの生成方法、xml文書の妥当性検証方法、xml文書の妥当性を検証するためのオートマトンの生成システム、xml文書の妥当性検証システムおよびプログラム |
US7062708B2 (en) * | 2002-09-19 | 2006-06-13 | International Business Machines Corporation | Tree construction for XML to XML document transformation |
US7668802B2 (en) * | 2007-07-30 | 2010-02-23 | Alcatel Lucent | Method and appliance for XML policy matching |
US8739022B2 (en) * | 2007-09-27 | 2014-05-27 | The Research Foundation For The State University Of New York | Parallel approach to XML parsing |
US20110088011A1 (en) * | 2009-10-14 | 2011-04-14 | Vermeg Sarl | Automated Enterprise Software Development |
US20120159306A1 (en) * | 2010-12-15 | 2012-06-21 | Wal-Mart Stores, Inc. | System And Method For Processing XML Documents |
CN103164388B (zh) * | 2011-12-09 | 2016-07-06 | 北大方正集团有限公司 | 一种版式文件中结构化信息获取的方法及装置 |
EP3436933B1 (en) * | 2016-05-17 | 2019-08-07 | Google LLC | Systems and methods for automatic determination of layout constraints |
-
2018
- 2018-11-13 CN CN201811346349.5A patent/CN111176640B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6635089B1 (en) * | 1999-01-13 | 2003-10-21 | International Business Machines Corporation | Method for producing composite XML document object model trees using dynamic data retrievals |
CA2505370A1 (en) * | 2004-04-26 | 2005-10-26 | Watchfire Corporation | Method and system for website analysis |
CN102708155A (zh) * | 2012-04-20 | 2012-10-03 | 西安电子科技大学 | 基于回溯自动机语法分析的jsax解析器和解析方法 |
CN106951269A (zh) * | 2017-03-31 | 2017-07-14 | 武汉斗鱼网络科技有限公司 | 一种提升安卓应用的布局文件编写效率的方法及系统 |
CN107040818A (zh) * | 2017-03-31 | 2017-08-11 | 武汉斗鱼网络科技有限公司 | 用于安卓电视的布局层级分析方法及系统 |
Non-Patent Citations (7)
Title |
---|
Depth First Reading of large XML Files;PNS;《https://stackoverflow.com/questions/12494870/depth-first-reading-of-large-xml-files》;20120919;全文 * |
Python xml.etree.ElementTree解析XML文件;凯耐;《https://blog.csdn.net/weixin_36279318/article/details/79176475》;20180126;全文 * |
XString: XML as a String;William Gilreath;《https://arxiv.org/pdf/cs/0610020.pdf》;20061031;全文 * |
基于DOM的移动终端布局解析器的设计与实现;陈天伟;《移动通信》;20170830(第16期);全文 * |
基于Lint的Android布局性能检测方法;李维勇等;《信息化研究》;20180820(第04期);全文 * |
面向XML流数据的树模式匹配方法;路瑶;《软件工程与应用》;20160401;全文 * |
高性能的XML解析器OnceXMLParser;金蓓弘等;《软件学报》;20081015(第10期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111176640A (zh) | 2020-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10318628B2 (en) | System and method for creation of templates | |
US10078709B2 (en) | Managing a display of results of a keyword search on a web page by modifying attributes of a DOM tree structure | |
CN110968325B (zh) | 一种小程序转换方法及装置 | |
US9171182B2 (en) | Dynamic data masking | |
KR101307711B1 (ko) | 소프트웨어 자산 기반 솔루션을 개발하기 위한 일관된 방법, 시스템 및 컴퓨터 프로그램 | |
US20130031526A1 (en) | Domain specific language design | |
CA2732643C (en) | Configurable hierarchical tree view | |
US8713521B2 (en) | Discovery, analysis, and visualization of dependencies | |
US9442718B1 (en) | System for assisting in locating changes in source code version control system | |
CN110716804A (zh) | 无用资源的自动删除方法、装置、存储介质及电子设备 | |
CN112632425B (zh) | 一种离线资源文件的生成方法、装置、设备及存储介质 | |
CN116841536B (zh) | 一种组件引用关系重构方法、装置、系统及存储介质 | |
US9128963B2 (en) | Decomposing XML schema documents into subsets | |
CN113721910A (zh) | 界面代码生成方法、装置、电子设备和计算机可读介质 | |
CN103226475B (zh) | 转码时实现控件替换的方法及装置 | |
CN111176640B (zh) | Android工程中布局层级展现方法、存储介质、设备及系统 | |
US20090287994A1 (en) | Document processing device and document processing method | |
CN111221610B (zh) | 一种页面元素采集方法和装置 | |
Le Zou et al. | On synchronizing with web service evolution | |
CN113434748A (zh) | 基于模板标注的分布式爬虫方法、装置、计算机装置及计算机可读存储介质 | |
CN113127776A (zh) | 面包屑路径生成方法、装置及终端设备 | |
CN116521742B (zh) | 源代码分析结果聚合方法、装置、电子设备及存储介质 | |
US20230367471A1 (en) | System and Method for Specifying Properties for a Protocol-Compliant Uniform Resource Locator | |
JP4663526B2 (ja) | 帳票作成支援装置、帳票作成支援方法、および帳票作成支援プログラム | |
US20140258835A1 (en) | System and method to download images from a website |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |