CN112015497B - 换肤方法及装置 - Google Patents
换肤方法及装置 Download PDFInfo
- Publication number
- CN112015497B CN112015497B CN201910394882.7A CN201910394882A CN112015497B CN 112015497 B CN112015497 B CN 112015497B CN 201910394882 A CN201910394882 A CN 201910394882A CN 112015497 B CN112015497 B CN 112015497B
- Authority
- CN
- China
- Prior art keywords
- skin
- changing
- strategy
- control
- target
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Abstract
本申请公开了一种换肤方法及装置,属于计算机技术领域。方法包括:终端设备获取第一用户界面上所有可换肤的UI控件;通过对每个可换肤的UI控件执行换肤操作,对第一用户界面进行换肤,换肤操作包括:根据可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略,换肤策略携带有控件类型标识和换肤属性标识,换肤策略集合存储有目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略;采用换肤策略对可换肤的UI控件进行换肤。本申请能够解决目前的换肤方法灵活性较低的问题。本申请用于对应用程序进行换肤。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种换肤方法及装置。
背景技术
终端设备上通常安装有各种各样的应用软件(application,APP)。每个APP都有各自的用户界面(User Interface,UI)。用户界面用于实现APP与用户之间的交互。一个用户界面通常由多个UI控件组成。其中,UI控件的类型可以分为多种,例如,UI控件的类型可以包括:按钮类、文本类以及图片类等。每种类型的UI控件具有至少一个属性。例如,按钮控件具有形状、字体以及颜色等属性。UI控件的显示样式由UI控件的属性决定。终端设备可以通过改变UI控件的属性改变UI控件的显示样式(即实现对UI控件的换肤),从而实现对用户界面的换肤。
相关技术中,终端设备上的APP启动后,终端设备中通常运行有一个该APP对应的缓存表。该缓存表中存储有多个换肤策略,每个换肤策略对应一个属性。在某一用户界面的页面加载过程中,终端设备根据该用户界面上的UI控件的属性从该缓存表中获取属性对应的换肤策略。其中,每个换肤策略用于改变一种类型的UI控件的对应属性,也即是,当不同类型的UI控件具有相同属性时,终端设备从该缓存表中获取的该相同属性对应的换肤策略只能对其中一种类型的UI控件实现换肤。因此相关技术中的换肤灵活性较低。
发明内容
本申请实施例提供了一种换肤方法及装置,可以解决目前的换肤方法的灵活性较低的问题。所述技术方案如下:
第一方面,提供了一种换肤方法,应用于终端设备,所述方法包括:
获取第一用户界面上所有可换肤的UI控件,所述第一用户界面为目标应用程序中已加载的任一用户界面,所述目标应用程序为所述终端设备中具有换肤功能的应用程序;通过对每个所述可换肤的UI控件执行换肤操作,对所述第一用户界面进行换肤,其中,所述换肤操作包括:根据所述可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略,所述换肤策略携带有控件类型标识和换肤属性标识,所述换肤策略集合存储有所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略;采用所述换肤策略对所述可换肤的UI控件进行换肤。
需要说明的是,对于每个可换肤的UI控件,终端设备可以根据该可换肤的UI控件的控件类型和换肤属性,从换肤策略集合中获取换肤策略,采用换肤策略对该可换肤的UI控件进行换肤。由于换肤策略携带有控件类型标识和换肤属性标识,因此换肤策略集合中可以存储有针对不同类型的UI控件的同一属性的多个换肤策略。当不同类型的UI控件具有相同的某一属性时,终端设备可以根据控件类型和换肤属性,从换肤策略集合中获取每种类型的UI控件具有的每个属性对应的换肤策略,从而实现对所有类型的UI控件进行换肤,提高了换肤灵活性。
可选地,所述换肤策略集合用于存储所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,在对每个所述可换肤的UI控件执行换肤操作之前,所述方法还包括:在所述第一用户界面的页面加载过程中,获取所述第一用户界面上的所有控件类型;当所述换肤策略集合中未存储有目标控件类型对应的换肤策略时,获取所述目标控件类型对应的所有换肤策略,所述目标控件类型为所述第一用户界面上的任一控件类型;将所述目标控件类型对应的所有换肤策略存储至所述换肤策略集合中。
示例地,对于目标控件类型,终端设备可以检测换肤策略集合中是否存储有目标控件类型对应的换肤策略,当换肤策略集合中存储有目标控件类型对应的换肤策略时,获取未检测的控件类型,并将该未检测的控件类型作为新的目标控件类型,再次检测换肤策略集合中是否存储有目标控件类型对应的换肤策略。
可选地,所述获取所述目标控件类型对应的所有换肤策略,包括:基于所述目标控件类型,从策略分组集合中获取目标策略检索信息,所述策略分组集合中存储有多个策略检索信息,每个所述策略检索信息用于指示获取一种控件类型对应的所有换肤策略,所述目标策略检索信息包括所述目标控件类型的策略检索信息;获取所述目标策略检索信息指示获取的所有换肤策略,并将所述目标策略检索信息指示获取的所有换肤策略作为所述目标控件类型对应的换肤策略。
可选地,当控件类型为所述目标控件类型的UI控件具有父类UI控件时,所述目标策略检索信息还包括所述父类UI控件的控件类型的策略检索信息。
需要说明的是,由于策略分组集合中存储的每个策略检索信息用于指示一种控件类型对应的所有换肤策略,换肤策略集合中存储目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略。因此,当打开目标应用程序的部分用户界面时,无需在换肤策略集合中存储该目标应用程序的所有用户界面上的所有可换肤的UI控件对应的换肤策略,只需存储已打开的部分用户界面上的可换肤的UI控件对应的换肤策略。并且用户在使用目标应用程序时,通常使用一次目标应用程序所打开的用户界面的数量占目标应用程序的所有用户界面的数量的10%。因此,可以根据已加载的用户界面上的控件类型,更新换肤策略集合,从而实现按需加载换肤策略。另外,由于一种控件类型通常对应多个换肤策略,而策略分组集合中存储的策略检索信息与控件类型一一对应,因此换肤策略集合和策略分组集合占用的内存均较少,进而对目标应用程序的运行性能的影响较小。
可选地,在将所述目标控件类型对应的所有换肤策略存储至所述换肤策略集合中之后,所述方法还包括:删除所述策略分组集合中的所述目标策略检索信息。由于换肤策略集合中已经存储了目标策略检索信息所指示的换肤策略,因此可以删除策略分组集合中的目标策略检索信息,以减小策略分组集合所占用的内存,从而提高目标应用程序的运行性能。
可选地,所述方法还包括:在所述目标应用程序的启动初始阶段,生成所述策略分组集合,所述策略分组集合中包括所述目标应用程序的开发模块中定义的所有策略检索信息,所述终端设备中存储有所述目标应用程序的开发模块中的所有策略检索信息指示获取的所有换肤策略。
可选地,所述生成所述策略分组集合,包括:创建初始策略分组集合,所述初始策略分组集合为空集合;分别获取每个所述开发子模块中定义的策略检索信息;将所有所述开发子模块中定义的策略检索信息均存储至所述初始策略分组集合,得到所述策略分组集合。示例地,终端设备可以在目标应用程序的启动初始阶段,创建一个空缓存表,将该空缓存表作为初始策略分组集合。初始策略分组集合还可以是空队列或空链表。
可选地,所述换肤策略的Java类以及所述策略检索信息的Java类均由注解处理工具在所述目标应用程序的开发阶段,对Java注解进行处理生成。示例地,可以先采用注解扩展目标应用程序中UI控件的换肤策略。扩展换肤策略包括更新换肤策略和增加换肤策略中的至少一种。接着通过APT扫描注解,并根据注解中的数据生成换肤策略的Java类。
需要说明的是,由于换肤策略的Java类是由APT在目标应用程序的开发阶段,对Java注解进行处理生成的,因此当需要对换肤策略的Java类进行修改时,仅需修改Java注解中扩展的换肤策略,并通过APT读取注解中修改后的换肤策略以生成新的换肤策略的Java类。无需直接对换肤策略的Java类进行修改,从而降低了目标应用程序的开发和维护成本。且在应用程序开发完成后,即在该应用程序的维护阶段,开发人员可以通过在该应用程序的开发代码中添加用于扩展UI控件的换肤策略的注解或修改注解,即可实现对该应用程序的换肤功能的扩展或更新,从而实现轻量级接入。
可选地,所述方法还包括:在所述目标应用程序的启动初始阶段,创建空集合,并将所述空集合作为所述换肤策略集合。示例地,终端设备可以在目标应用程序的启动初始阶段,创建一个空缓存表,将该空缓存表作为换肤策略集合。换肤策略集合还可以是队列或链表。
第二方面,提供了一种换肤装置,应用于终端设备,所述装置包括:
第一获取模块,用于获取第一用户界面上所有可换肤的UI控件,所述第一用户界面为目标应用程序中已加载的任一用户界面,所述目标应用程序为所述终端设备中具有换肤功能的应用程序;
换肤模块,用于通过对每个所述可换肤的UI控件执行换肤操作,对所述第一用户界面进行换肤,其中,所述换肤操作包括:
根据所述可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略,所述换肤策略携带有控件类型标识和换肤属性标识,所述换肤策略集合存储有所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略;
采用所述换肤策略对所述可换肤的UI控件进行换肤。
可选地,所述换肤策略集合用于存储所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,所述装置还包括:
第二获取模块,用于在所述第一用户界面的页面加载过程中,获取所述第一用户界面上的所有控件类型;
第三获取模块,用于当所述换肤策略集合中未存储有目标控件类型对应的换肤策略时,获取所述目标控件类型对应的所有换肤策略,所述目标控件类型为所述第一用户界面上的任一控件类型;
存储模块,用于将所述目标控件类型对应的所有换肤策略存储至所述换肤策略集合中。
可选地,所述第三获取模块,用于:
基于所述目标控件类型,从策略分组集合中获取目标策略检索信息,所述策略分组集合中存储有多个策略检索信息,每个所述策略检索信息用于指示获取一种控件类型对应的所有换肤策略,所述目标策略检索信息包括所述目标控件类型的策略检索信息;
获取所述目标策略检索信息指示获取的所有换肤策略,并将所述目标策略检索信息指示获取的所有换肤策略作为所述目标控件类型对应的换肤策略。
可选地,当控件类型为所述目标控件类型的UI控件具有父类UI控件时,所述目标策略检索信息还包括所述父类UI控件的控件类型的策略检索信息。
可选地,所述装置还包括:
删除模块,用于删除所述策略分组集合中的所述目标策略检索信息。
可选地,所述装置还包括:
生成模块,用于在所述目标应用程序的启动初始阶段,生成所述策略分组集合,所述策略分组集合中包括所述目标应用程序的开发模块中定义的所有策略检索信息,所述终端设备中存储有所述目标应用程序的开发模块中的所有策略检索信息指示获取的所有换肤策略。
可选地,所述目标应用程序的开发模块包括多个开发子模块,所述生成模块,用于:
创建初始策略分组集合,所述初始策略分组集合为空集合;
分别获取每个所述开发子模块中定义的策略检索信息;
将所有所述开发子模块中定义的策略检索信息均存储至所述初始策略分组集合,得到所述策略分组集合。
可选地,所述换肤策略的Java类以及所述策略检索信息的Java类均由注解处理工具在所述目标应用程序的开发阶段,对Java注解进行处理生成。
可选地,所述装置还包括:
创建模块,用于在所述目标应用程序的启动初始阶段,创建空集合,并将所述空集合作为所述换肤策略集合。
第三方面,提供了一种换肤装置,其特征在于,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器在运行所述可执行指令时,能够实现第一方面任一所述的换肤方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在处理组件上运行时,使得所述处理组件执行第一方面任一所述的换肤方法。
第五方面,提供了一种计算机程序,当所述计算机程序被计算机执行时,用于执行第一方面任一所述的换肤方法。
本申请提供的技术方案带来的有益效果包括:
对于每个可换肤的UI控件,终端设备根据该可换肤的UI控件的控件类型和换肤属性,从换肤策略集合中获取换肤策略,采用换肤策略对该可换肤的UI控件进行换肤。由于换肤策略携带有控件类型标识和换肤属性标识,因此换肤策略集合中可以存储有针对不同类型的UI控件的同一属性的多个换肤策略。当不同类型的UI控件具有相同某一属性时,终端设备可以根据控件类型和换肤属性,从换肤策略集合中获取每种类型的UI控件具有的每个属性对应的换肤策略,从而实现对所有类型的UI控件进行换肤,提高了换肤灵活性。
附图说明
图1是本申请实施例提供的一种换肤方法的流程图。
图2是本申请实施例提供的一种生成策略分组集合的方法流程图。
图3是本申请实施例提供的一种获取换肤策略集合的方法流程图。
图4是本申请实施例提供的一种换肤装置的框图。
图5是本申请实施例提供的另一种换肤装置的框图。
图6是本申请实施例提供的再一种换肤装置的框图。
图7是本申请实施例提供的又一种换肤装置的框图。
图8是本申请实施例提供的又一种换肤装置的框图。
图9是本申请实施例提供的一种换肤装置的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了便于读者对本文的理解,首先对本文中涉及的一些专业名词进行相应的解释:
1、注解(Annotation):Java语言中的一种语法结构,用于在源代码中添加标记或附加补充信息。注解不会影响源代码的逻辑。根据实际用途可以自定义符合业务需求的注解。
2、注解处理工具(Annotation Processor Tool,APT):一种处理注解的工具,用于在源代码中检测注解,并读取检测到的注解中的数据,根据读取的数据进行相应的业务处理。例如,APT可以根据注解中自定义的规则自动生成源代码。
3、UI控件:用于在用户界面上显示页面元素。例如,按钮控件用于在用户界面上显示按钮,文本控件用于在用户界面上显示文本信息,图片控件用于在用户界面上显示图片等。
4、换肤策略(SkinAttr):对UI控件进行换肤的方式,其具体表示为实现UI控件换肤的Java类。每种类型的UI控件具有一个或多个属性,每个属性对应一个换肤策略。不同类型的UI控件具有的同一属性所对应的换肤策略不同。
相关技术中,终端设备中运行的APP对应的缓存表中存储的换肤策略均采用UI控件的属性进行命名。在APP的某一用户界面的加载过程中,对于该用户界面上的每个UI控件,终端设备根据UI控件具有的每个属性的属性名,分别从该缓存表中查找对应的换肤策略,以获取该UI控件的所有换肤策略。当终端设备接收到针对该用户界面的换肤指令时,根据每个UI控件的所有换肤策略,分别对该用户界面上的各个UI控件进行换肤,进而实现对该用户界面的换肤。
但是,由于相关技术中的缓存表中的换肤策略采用属性名进行命名,因此对于不同类型的UI控件的同一属性,缓存表中仅能存储一个换肤策略。而不同类型的UI控件的换肤策略不同,当APP的用户界面中存在多个类型的UI控件具有相同的某个属性时,终端设备至多能够从缓存表中获取其中一个类型的UI控件的该属性对应的换肤策略,即至多只能对一个类型的UI控件完成换肤,而具有该属性的其他类型的UI控件会换肤失败。
图1是本申请实施例提供的一种换肤方法的流程图,该方法应用于终端设备。如图1所示,该方法包括:
步骤101、在目标应用程序的启动初始阶段,生成策略分组集合。
其中,目标应用程序为终端设备中具有换肤功能的应用程序。
可选地,策略分组集合中包括目标应用程序的开发模块中定义的所有策略检索信息,每个策略检索信息用于指示获取一种控件类型对应的所有换肤策略。终端设备中存储有目标应用程序的开发模块中的所有策略检索信息指示获取的所有换肤策略。
可选地,换肤策略可以由APT在目标应用程序的开发阶段,对Java注解进行处理生成。在本申请实施例中,每个换肤策略中均携带有控件类型标识和换肤属性标识,每个换肤策略用于改变一种类型的UI控件的一个属性。
在本申请实施例中,可以采用注解扩展目标应用程序中UI控件的换肤策略。扩展换肤策略包括更新换肤策略和增加换肤策略中的至少一种。
可选地,在采用注解扩展UI控件的某个属性对应的换肤策略时,存在以下两种情况:
第一种情况,目标应用程序中存在该属性对应的换肤接口,该换肤接口为改变该属性的方法。则可以使用SkinMethods注解与SkinMethod注解实现该属性对应的换肤策略的扩展。
可选地,SkinMethods注解中可以定义多个SkinMethod注解(SkinMethods注解可视为一个容器,该容器内包含多个SkinMethod注解)。开发人员可以在每个SkinMethod注解中定义UI控件的控件类型、该UI控件具有的一个属性以及该属性对应的换肤接口,以对换肤策略进行扩展。示例地,SkinMethod注解中可以定义类型(type)、属性(attribute)和方法(method)这三个参数。其中,type用于定义UI控件的控件类型,attribute用于定义UI控件具有的一个属性,method用于定义该属性对应的换肤接口。
第二种情况,目标应用程序中不存在该属性对应的换肤接口。则可以使用SkinAdapter注解自定义换肤接口,以实现对该属性对应的换肤策略的扩展。
示例地,本申请实施例以ImageView控件(用于显示图片的UI控件)为例,对上述两种情况下采用注解扩展换肤策略的过程进行说明。其中,ImageView控件具有图片内容(src)和着色(tint)等属性。本申请实施例以使用SkinMethods注解与SkinMethod注解对ImageView控件的src属性对应的换肤策略进行扩展,并以使用SkinAdapter注解对ImageView控件的tint属性对应的换肤策略进行扩展为例进行说明。
可选地,使用SkinMethods注解与SkinMethod注解对ImageView控件的src属性对应的换肤策略进行扩展的方式如下:
@SkinMethods({
@SkinMethod(type=ImageView.class,attribute="src",method="setImageDrawable"),
})
在该扩展方式中,定义控件类型为ImageView,定义属性为src属性,定义换肤接口为setImageDrawable。
可选地,使用SkinAdapter注解对ImageView控件的tint属性对应的换肤策略进行扩展的方式如下:
@SkinAdapter("tint")
public static void setTint(ImageView imageView,ColorStateList tint){
…
}
在该扩展方式中,自定义的换肤接口为setTint。
需要说明的是,对于上述第一种情况,在采用注解扩展UI控件的某个属性对应的换肤策略时,目标应用程序中存在该属性对应的换肤接口。当存在属性的兼容性问题时,开发人员也可以使用SkinAdapter注解自定义换肤接口,以实现对该属性对应的换肤策略的扩展,从而使得换肤策略对不同系统版本和不同的应用程序的兼容性较高。
还需要说明的是,可以在SkinMethod注解或SkinAdapter注解中设置优先级字段,该优先级字段用于表示定义的换肤策略的优先级。可选地,优先级字段可以用数值、字母或符号表示,本申请实施例对此不做限定。示例地,当优先级字段用数值表示时,数值越大表示对应的换肤策略的优先级越高。若没有对该优先级字段进行定义,则该优先级字段为默认字段。
进一步的,在采用注解扩展目标应用程序中UI控件的换肤策略后,通过APT扫描注解,并根据注解中的数据生成换肤策略的Java类。
本申请实施例中,由于换肤策略的Java类是由APT在目标应用程序的开发阶段,对Java注解进行处理生成的,因此当需要对换肤策略的Java类进行修改时,仅需修改Java注解中扩展的换肤策略,并通过APT读取注解中修改后的换肤策略以生成新的换肤策略的Java类。无需直接对换肤策略的Java类进行修改,从而降低了目标应用程序的开发和维护成本。且在某一应用程序开发完成后,即在该应用程序的维护阶段,开发人员可以通过在该应用程序的开发代码中添加用于扩展UI控件的换肤策略的注解或修改注解,即可实现对该应用程序的换肤功能的更新或扩展,从而实现轻量级接入。
可选地,策略检索信息的Java类由APT在目标应用程序的开发阶段,对Java注解进行处理生成。在本申请实施例中,可以通过APT对换肤策略进行分组处理。可选地,可以通过APT将同一控件类型对应的所有换肤策略分为一组,并生成每种控件类型对应的策略检索信息以管理该控件类型对应的所有换肤策略。可选地,该策略检索信息可以为ISkinAttrGroup实现类。可以采用控件类型名对相应的策略检索信息(ISkinAttrGroup实现类)进行命名。
示例地,策略检索信息可以命名为SAG(SkinAttrGroup的简称)加上UI控件全类名。例如可以采用SAGAndroidWidgetImageView对ImageView控件对应的策略检索信息进行命名;又例如可以采用SAGAndroidWidgetView对View控件(所有UI控件的父类控件)对应的策略检索信息进行命名。
可选地,生成ImageView控件对应的策略检索信息(ISkinAttrGroup实现类)的方式如下:
1、定义ISkinAttrGroup接口。
2、生成SAGAndroidWidgetImageView实现类。
其中,定义loadSkinAttr方法中的supportSkinAttrs为一个AccessorKey与SkinAttr具体实现类的map集合。map集合为一种映射集合。可选地,该map集合可以为哈希(Hash)表,AccessorKey为映射集合中的Key值。其中,AccessorKey是一种Java类,AccessorKey中定义有控件类型和该控件类型具有的属性。在本申请实施例中,map集合中的每个元素包括一个AccessorKey以及对应的换肤策略,AccessorKey中封装有相应的控件类型名和属性名。当终端设备调用某种控件类型对应的ISkinAttrGroup实现类时,终端设备能够调用该loadSkinAttr方法,将该控件类型对应的所有换肤策略加载到map集合(supportSkinAttrs)中。
由于目前的应用程序通常采用模块化开发,应用程序的开发模块中包括多个独立的开发子模块,为了便于对应用程序中的策略检索信息进行管理,可以以开发子模块为单位,通过APT对应用程序中的策略检索信息进行分组。例如可以将同一个开发子模块对应的所有控件类型对应的策略检索信息分为一组,并生成每个开发子模块对应的ISkinAttrRoot实现类以管理该开发子模块对应的所有策略检索信息,以适应于目标应用程序的模块化开发。其中,可以采用开发子模块的模块名对相应的ISkinAttrRoot实现类进行命名。例如,假设一开发子模块的模块名为skinner,则可以采用SkinAttrRoot$$skinner对skinner开发子模块对应的ISkinAttrRoot实现类进行命名。
示例地,生成skinner开发子模块对应的ISkinAttrRoot实现类的过程如下:
1、定义ISkinAttrRoot接口。
public interface ISkinAttrRoot{
void loadGroup(Map<String,String>skinAttrGroups);
}
2、生成SkinAttrRoot$$skinner实现类。
其中,loadGroup方法中的skinAttrGroups为一个map集合。当终端设备调用某个开发子模块对应的ISkinAttrRoot实现类时,终端设备能够调用该loadGroup方法,将该开发子模块对应的所有策略检索信息加载到该map集合(skinAttrGroups)中。
进一步的,在对策略检索信息进行分组处理后,可以将ISkinAttrRoot实现类注册到换肤框架中。在本申请实施例中,将ISkinAttrRoot实现类注册到换肤框架中的方式有两种:
第一种方式,在目标应用程序的编译阶段,采用Gradle插件将每个开发子模块对应的ISkinAttrRoot实现类注册到换肤框架中。示例地,在目标应用程序的编译阶段,采用Gradle插件从目标应用程序的源代码中过滤出ISkinAttrRoot实现类,通过ASM(对Java字节码进行操作和分析的框架)修改换肤框架的初始化方法的方法体,在方法体中添加注册ISkinAttrRoot实现类的字节码以进行代码注入,即完成动态注册。
由于在目标应用程序的编译阶段,采用Gradle插件将每个开发子模块对应的ISkinAttrRoot实现类注册到换肤框架中,因此,不会影响目标应用程序的运行性能,且注册的灵活性较高。
第二种方式,在目标应用程序的启动初始阶段,终端设备将每个开发子模块对应的ISkinAttrRoot实现类注册到换肤框架中。示例地,在目标应用程序的启动初始阶段,终端设备扫描所有生成ISkinAttrRoot实现类的路径,遍历该路径下所有的Java类,将所有Java类中的ISkinAttrRoot实现类注册到换肤框架中。
在将ISkinAttrRoot实现类注册到换肤框架中后,终端设备可以在目标应用程序的启动初始阶段,生成策略分组集合。图2是本申请实施例提供的一种生成策略分组集合的方法流程图,如图2所示,该方法包括:
步骤1011、创建初始策略分组集合,初始策略分组集合为空集合。
可选地,终端设备可以在目标应用程序的启动初始阶段,创建一个空缓存表,将该空缓存表作为初始策略分组集合。初始策略分组集合还可以是空队列或空链表,本申请实施例对初始策略分组集合的形式不做限定。
步骤1012、分别获取每个开发子模块中定义的策略检索信息。
可选地,终端设备可以在目标应用程序的启动初始阶段,通过SkinAttrFactory接口获取注册到换肤框架中的所有开发子模块对应的ISkinAttrRoot实现类,以获取每个开发子模块对应的所有策略检索信息。示例地,该框架的初始化接口可以为SkinAttrFactory接口,对于每个开发子模块对应的ISkinAttrRoot实现类,终端设备可以通过SkinAttrFactory接口,调用该ISkinAttrRoot实现类中定义的loadGroup方法,从而获取到该ISkinAttrRoot实现类所管理的策略检索信息。其中,SkinAttrFactory接口是自定义的一种安卓系统的接口类。
例如,假设一开发子模块的模块名为skinner,其对应的ISkinAttrRoot实现类的类名为SkinAttrRoot$$skinner,该开发子模块包括ImageView控件。终端设备可以通过SkinAttrFactory接口,调用SkinAttrRoot$$skinner实现类中定义的loadGroup方法,根据ImageView控件的控件类型名,获取ImageView控件的策略检索信息,该策略检索信息为:SAGAndroidWidgetImageView。
步骤1013、将所有开发子模块中定义的策略检索信息均存储至初始策略分组集合,得到策略分组集合。
可选地,对于每个开发子模块,终端设备可以通过SkinAttrFactory接口,调用该开发子模块对应的ISkinAttrRoot实现类中定义的loadGroup方法,将该开发子模块对应的所有策略检索信息存储至初始策略分组集合中,得到策略分组集合。示例地,开发子模块skinner对应的ISkinAttrRoot实现类的类名为SkinAttrRoot$$skinner,该开发子模块包括ImageView控件。终端设备可以通过SkinAttrFactory接口,调用SkinAttrRoot$$skinner实现类中定义的loadGroup方法,将skinner中ImageView控件的策略检索信息SAGAndroidWidgetImageView存储至初始策略分组集合。
可选地,SkinMethod注解或SkinAdapter注解中具有优先级字段,该优先级字段用于表示换肤策略的优先级。策略检索信息用于管理一种控件类型对应的所有换肤策略。因此,策略检索信息中携带有其管理的换肤策略的优先级,且策略检索信息中携带的优先级用于指示策略检索信息的优先级。示例地,该策略检索信息中携带的优先级为其管理的所有换肤策略中最高级别的优先级。由于不同的开发子模块可能具有相同的控件类型,因此目标应用程序中同一控件类型可能会对应多条策略检索信息。策略检索信息中携带有其管理的换肤策略的优先级,这样在将所有开发子模块中定义的策略检索信息存储至初始策略分组集合的过程中,当存在多个开发子模块中定义有同一控件类型对应的策略检索信息时,终端设备可以根据策略检索信息中携带的优先级,将优先级高的策略检索信息存储至初始策略分组集合,并过滤优先级低的策略检索信息。当存在多个开发子模块中定义有同一控件类型的多个优先级相同的策略检索信息时,选择其中一个策略检索信息存储至初始策略分组集合中。
步骤102、在目标应用程序中的第一用户界面的加载过程中,获取换肤策略集合。
第一用户界面为目标应用程序中的任一用户界面。换肤策略集合用于存储目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略。换肤策略中携带有控件类型标识和属性标识。示例地,可以采用控件类型名和属性名对换肤策略进行命名。例如,ImageView控件的Src属性对应的换肤策略可以为:AndroidWidgetImageViewSrcAttr。
需要说明的是,由于换肤策略中携带有控件类型标识和属性标识,因此当不同类型的UI控件具有相同的某一属性时,换肤策略集合中可以存储每种类型的UI控件的该属性对应的换肤策略。进而终端设备能够从换肤策略集合中获取每种类型的UI控件具有的每个属性对应的换肤策略,实现对所有类型的UI控件的换肤,其换肤灵活性较高。
示例地,可以在目标应用程序的启动初始阶段,创建空集合,并将空集合作为换肤策略集合。可选地,终端设备可以在目标应用程序的启动初始阶段,创建一个空缓存表,将该空缓存表作为换肤策略集合。换肤策略集合还可以是队列或链表,本申请实施例对换肤策略集合的形式不做限定。
可选地,如图3所示,步骤102的实现过程包括:
步骤1021、在第一用户界面的页面加载过程中,获取第一用户界面上的所有控件类型。
可选地,在第一用户界面的页面加载过程中,终端设备可以通过SkinnableViewFactory2接口获取第一用户界面上的所有控件类型。当第一用户界面上存在View控件和ImageView控件,则终端设备获取到的第一用户界面上的控件类型包括View和ImageView。SkinnableViewFactory2接口是一种安卓系统的接口类。在本申请实施例中,SkinnableViewFactory2接口用于在用户界面的页面加载过程中,解析页面中的布局文件,并获取用户界面上的所有控件类型以及各个控件类型对应的所有属性。
步骤1022、检测换肤策略集合中是否存储有目标控件类型对应的换肤策略。
目标控件类型为第一用户界面上的任一控件类型。示例地,终端设备可以通过SkinAttrFactory接口检测换肤策略集合中是否存储有目标控件类型对应的换肤策略。当换肤策略集合中存储有目标控件类型对应的换肤策略时,获取未检测的控件类型,并将该未检测的控件类型作为新的目标控件类型,再次执行该步骤1022。
步骤1023、当换肤策略集合中未存储有目标控件类型对应的换肤策略时,基于目标控件类型,从策略分组集合中获取目标策略检索信息。
其中,目标策略检索信息包括目标控件类型的策略检索信息。可选地,终端设备可以通过SkinAttrFactory接口,基于目标控件类型,从策略分组集合中获取目标策略检索信息。示例地,假设目标控件类型为View,终端设备可以通过SkinAttrFactory接口从策略分组集合中获取目标策略检索信息为:SAGAndroidWidgetView。
可选地,当控件类型为目标控件类型的UI控件具有父类UI控件时,目标策略检索信息可以包括目标控件类型的策略检索信息,以及该父类UI控件的控件类型的策略检索信息。
示例地,假设目标控件类型为ImageView,且ImageView控件具有父类UI控件,该父类控件为View控件。则终端设备基于ImageView从策略分组集合中获取的目标策略检索信息可以包括:SAGAndroidWidgetImageView和SAGAndroidWidgetView。
步骤1024、获取目标策略检索信息指示获取的所有换肤策略,并将目标策略检索信息指示获取的所有换肤策略作为目标控件类型对应的换肤策略。
可选地,终端设备可以通过SkinAttrFactory接口调用目标控件类型对应的目标策略检索信息(ISkinAttrGroup实现类)中定义的loadSkinAttr方法,从而获取到该目标控件类型对应的目标策略检索信息所管理的所有换肤策略。
示例地,假设目标控件类型为ImageView,且ImageView控件的父类UI控件为View控件。请参考步骤1023中的例子,基于ImageView获取的目标策略检索信息包括:SAGAndroidWidgetImageView和SAGAndroidWidgetView。终端设备可以通过SkinAttrFactory接口调用SAGAndroidWidgetImageView实现类中定义的loadSkinAttr方法,获取到ImageView控件的属性对应的换肤策略。以及调用SAGAndroidWidgetView实现类中定义的loadSkinAttr方法,获取到View控件的属性对应的换肤策略。并将ImageView控件的属性对应的换肤策略以及View控件的属性对应的换肤策略作为ImageView控件对应的换肤策略。
步骤1025、将目标控件类型对应的所有换肤策略存储至换肤策略集合中,以更新换肤策略集合。
可选地,终端设备可以通过SkinAttrFactory接口,调用目标控件类型对应的策略检索信息中定义的loadSkinAttr方法,将该目标控件类型对应的所有换肤策略存储至换肤策略集合中,以更新换肤策略集合。示例地,目标控件类型为ImageView,终端设备可以通过SkinAttrFactory接口,调用SAGAndroidWidgetImageView中定义的loadSkinAttr方法,以及SAGAndroidWidgetView中定义的loadSkinAttr方法,将ImageView控件对应的所有换肤策略存储至换肤策略集合中。
步骤1026、删除策略分组集合中的目标策略检索信息,以更新策略分组集合。
示例地,当目标控件类型为ImageView时,终端设备可以通过SkinAttrFactory接口删除策略分组集合中View控件的策略检索信息以及ImageView控件的策略检索信息,以更新策略分组集合。由于换肤策略集合中已经存储了目标策略检索信息所指示的换肤策略,因此可以删除策略分组集合中的目标策略检索信息,以减小策略分组集合所占用的内存,从而提高目标应用程序的运行性能。
可选地,终端设备可以基于换肤策略集合生成SkinnableView列表,该SkinnableView列表用于存储各个控件类型与对应的换肤策略。示例地,当换肤策略集合中存储有目标控件类型对应的换肤策略时,终端设备在通过SkinAttrFactory接口从换肤策略集合中获取目标控件类型对应的换肤策略时,通过SkinnableViewFactory2接口将目标控件类型与换肤策略进行关联,并将目标控件类型以及关联的换肤策略存储在SkinnableView列表中。当换肤策略集合中未存储有目标控件类型对应的换肤策略时,终端设备在通过SkinAttrFactory将目标控件类型对应的所有换肤策略存储至换肤策略集合中时,通过SkinnableViewFactory2接口将目标控件类型与换肤策略进行关联,并将目标控件类型以及关联的换肤策略存储在SkinnableView列表中。
本申请实施例中,由于策略分组集合中存储的每个策略检索信息用于指示一种控件类型所具有的可换肤的属性对应的换肤策略,换肤策略集合中存储目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略。因此,当打开目标应用程序的部分用户界面时,无需在换肤策略集合中存储该目标应用程序的所有用户界面上的所有可换肤的UI控件对应的换肤策略,只需存储已打开的部分用户界面上的可换肤的UI控件对应的换肤策略。并且用户在使用目标应用程序时,通常使用一次目标应用程序所打开的用户界面的数量占目标应用程序的所有用户界面的数量的10%。因此,可以根据已加载的用户界面上的控件类型,更新换肤策略集合,从而实现按需加载换肤策略。另外,由于一种控件类型通常对应多个换肤策略,而本申请实施例提供的策略分组集合中存储的策略检索信息与控件类型一一对应,因此相较于相关技术,本申请实施例提供的换肤策略集合和策略分组集合占用的内存均较少,进而对目标应用程序的运行性能的影响较小。
步骤103、当接收到针对第一用户界面的换肤指令时,获取第一用户界面上所有可换肤的UI控件。
可选地,当接收到针对目标应用程序的换肤指令时,终端设备可以获取目标应用程序中已加载的用户界面上所有可换肤的UI控件。在第一用户界面的页面加载完成后,当接收到针对目标应用程序的换肤指令时,终端设备获取该第一用户界面上所有可换肤的UI控件。
可选地,终端设备可以先获取到第一用户界面上的所有UI控件,再从所有UI控件中筛选出可换肤的UI控件。其中,可以通过UI控件携带的标记确定该UI控件是否可换肤。示例地,可以在UI控件中添加一个自定义属性标记“hwSkinEnable”,当该自定义属性标记的值为true即:hwSkinEnable=”true”,表示该UI控件可换肤;否则确定该UI控件不可换肤。
在执行步骤103之后,终端设备通过对每个可换肤的UI控件执行换肤操作,对第一用户界面进行换肤,其中,换肤操作包括步骤104和步骤105。
步骤104、根据可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略。
可选地,终端设备可以根据可换肤的UI控件的控件类型以及换肤属性,从基于换肤策略集合生成的SkinnableView列表中获取该可换肤的UI控件对应的换肤策略。示例地,假设该可换肤的UI控件为View控件,其控件类型为View,View控件具有背景(background)属性和背景着色(background Tint)属性,则终端设备可以通过SkinnableViewFactory2接口,根据控件类型View、属性background和属性background Tint,从SkinnableView列表中获取View控件对应的换肤策略。其中,该换肤策略包括AndroidWidgetViewBackgroundAttr和AndroidWidgetViewBackgroundTintAttr。
步骤105、采用换肤策略对可换肤的UI控件进行换肤。
可选地,终端设备可以采用该可换肤的UI控件关联的换肤策略,对该可换肤的UI控件进行换肤。示例地,终端设备可以通过换肤策略,获取皮肤包中与该可换肤的UI控件对应的资源文件,并采用该皮肤包中相应的资源文件更改该可换肤的UI控件的属性,从而实现对该可换肤的UI控件的换肤。
在本申请实施例中,当满足清空条件时,终端设备可以清空策略分组集合和换肤策略集合。示例地,该清空条件包括以下至少一种:终端设备关闭目标应用程序或者卸载目标应用程序;终端设备进行重启;终端设备接收到用户的清空操作所触发的清空指令。
综上所述,本申请实施例提供的换肤方法,对于每个可换肤的UI控件,终端设备根据该可换肤的UI控件的控件类型和换肤属性,从换肤策略集合中获取换肤策略,采用换肤策略对该可换肤的UI控件进行换肤。由于换肤策略携带有控件类型标识和换肤属性标识,因此换肤策略集合中可以存储有针对不同类型的UI控件的同一属性的多个换肤策略。当不同类型的UI控件具有相同某一属性时,终端设备可以根据控件类型和换肤属性,从换肤策略集合中获取每种类型的UI控件具有的每个属性对应的换肤策略,从而实现对所有类型的UI控件进行换肤,提高了换肤灵活性。
进一步的,由于换肤策略的Java类由APT在目标应用程序的开发阶段,对Java注解进行处理生成的,因此,当需要对换肤策略的Java类进行修改时,仅需修改Java注解中扩展的换肤策略,并通过APT读取注解中修改后的换肤策略以生成新的换肤策略的Java类,无需直接对换肤策略的Java类进行修改,从而降低了开发和维护成本。
另外,由于策略分组集合中存储的每个策略检索信息用于指示一种控件类型对应的所有换肤策略,换肤策略集合中存储目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,可以根据加载的用户界面上的控件类型,更新换肤策略集合,从而实现了按需加载换肤策略。减小了换肤策略集合和策略分组集合的内存,进一步减小了对目标应用程序的运行性能的影响。此外,由于换肤策略与UI控件相互独立,因此,不会影响UI控件的功能扩展灵活性。
本申请实施例提供的换肤方法的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,例如,当目标应用程序上所有用户界面均加载后,可以不执行步骤101。任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
图4是本申请实施例提供的一种换肤装置的框图,应用于终端设备,如图4所示,换肤装置400包括:
第一获取模块401,用于获取第一用户界面上所有可换肤的UI控件,第一用户界面为目标应用程序中已加载的任一用户界面,目标应用程序为终端设备中具有换肤功能的应用程序。
换肤模块402,用于通过对每个可换肤的UI控件执行换肤操作,对第一用户界面进行换肤,其中,换肤操作包括:
根据可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略,换肤策略携带有控件类型标识和换肤属性标识,换肤策略集合存储有目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略。
采用换肤策略对可换肤的UI控件进行换肤。
综上所述,本申请实施例提供的换肤装置,对于每个可换肤的UI控件,终端设备通过换肤模块根据该可换肤的UI控件的控件类型和换肤属性,从换肤策略集合中获取换肤策略,采用换肤策略对该可换肤的UI控件进行换肤。由于换肤策略携带有控件类型标识和换肤属性标识,因此换肤策略集合中可以存储有针对不同类型的UI控件的同一属性的多个换肤策略。当不同类型的UI控件具有相同某一属性时,终端设备可以根据控件类型和换肤属性,从换肤策略集合中获取每种类型的UI控件具有的每个属性对应的换肤策略,从而实现对所有类型的UI控件进行换肤,提高了换肤灵活性。
其中,换肤策略集合用于存储目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略。则请参考图5,图5是本申请实施例提供的另一种换肤装置的框图,该换肤装置400还包括:
第二获取模块403,用于在第一用户界面的页面加载过程中,获取第一用户界面上的所有控件类型。
第三获取模块404,用于当换肤策略集合中未存储有目标控件类型对应的换肤策略时,获取目标控件类型对应的所有换肤策略,目标控件类型为第一用户界面上的任一控件类型。
存储模块405,用于将目标控件类型对应的所有换肤策略存储至换肤策略集合中。
可选地,该第三获取模块404,用于:
基于目标控件类型,从策略分组集合中获取目标策略检索信息,策略分组集合中存储有多个策略检索信息,每个策略检索信息用于指示获取一种控件类型对应的所有换肤策略,目标策略检索信息包括目标控件类型的策略检索信息。
获取目标策略检索信息指示获取的所有换肤策略,并将目标策略检索信息指示获取的所有换肤策略作为目标控件类型对应的换肤策略。可选地,当控件类型为目标控件类型的UI控件具有父类UI控件时,目标策略检索信息还包括父类UI控件的控件类型的策略检索信息。
图6是本申请实施例提供的再一种换肤装置的框图,如图6所示,该换肤装置400还包括:
删除模块406,用于删除策略分组集合中的目标策略检索信息。
图7是本申请实施例提供的又一种换肤装置的框图,如图7所示,该换肤装置400还包括:
生成模块407,用于在目标应用程序的启动初始阶段,生成策略分组集合,策略分组集合中包括目标应用程序的开发模块中定义的所有策略检索信息,终端设备中存储有目标应用程序的开发模块中的所有策略检索信息指示获取的所有换肤策略。
可选地,目标应用程序的开发模块包括多个开发子模块,则该生成模块407,用于:
创建初始策略分组集合,初始策略分组集合为空集合。
分别获取每个开发子模块中定义的策略检索信息。
将所有开发子模块中定义的策略检索信息均存储至初始策略分组集合,得到策略分组集合。
可选地,换肤策略的Java类以及策略检索信息的Java类均由注解处理工具在目标应用程序的开发阶段,对Java注解进行处理生成。
图8是本申请实施例提供的又一种换肤装置的框图,如图8所示,该换肤装置400还包括:创建模块408,用于在目标应用程序的启动初始阶段,创建空集合,并将空集合作为换肤策略集合。
综上所述,本申请实施例提供的换肤装置,对于每个可换肤的UI控件,终端设备通过换肤模块根据该可换肤的UI控件的控件类型和换肤属性,从换肤策略集合中获取换肤策略,采用换肤策略对该可换肤的UI控件进行换肤。由于换肤策略携带有控件类型标识和换肤属性标识,因此换肤策略集合中可以存储有针对不同类型的UI控件的同一属性的多个换肤策略。当不同类型的UI控件具有相同某一属性时,终端设备可以根据控件类型和换肤属性,从换肤策略集合中获取每种类型的UI控件具有的每个属性对应的换肤策略,从而实现对所有类型的UI控件进行换肤,提高了换肤灵活性。
进一步的,由于换肤策略的Java类由APT在目标应用程序的开发阶段,对Java注解进行处理生成的,因此,当需要对换肤策略的Java类进行修改时,仅需修改Java注解中扩展的换肤策略,并通过APT读取注解中修改后的换肤策略以生成新的换肤策略的Java类,无需直接对换肤策略的Java类进行修改,从而降低了开发和维护成本。
另外,由于策略分组集合中存储的每个策略检索信息用于指示一种控件类型对应的所有换肤策略,换肤策略集合中存储目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,可以根据加载的用户界面上的控件类型,更新换肤策略集合,从而实现了按需加载换肤策略。减小了换肤策略集合和策略分组集合的内存,进一步减小了对目标应用程序的运行性能的影响。此外,由于换肤策略与UI控件相互独立,因此,不会影响UI控件的功能扩展灵活性。
图9是本申请实施例提供的一种换肤装置的框图,应用于终端设备,如图9所示,数据传输装置500包括:存储器501,处理器502及存储在存储器501上并能够在处理器502上运行的计算机程序,当处理器502执行计算机程序时,实现本申请方法侧实施例所述的换肤方法。
可选地,该装置500还包括通信总线503和通信接口504。
其中,处理器502包括一个或者一个以上处理核心,处理器502通过运行计算机程序以及单元,从而执行各种功能应用以及数据处理。
存储器501可用于存储计算机程序以及单元。具体的,存储器可存储操作系统和至少一个功能所需的应用程序单元。操作系统可以是实时操作系统(Real Time eXecutive,RTX)、LINUX、UNIX、WINDOWS或OSX之类的操作系统。
通信接口504可以为多个,通信接口504用于与其它存储设备或网络设备进行通信。
存储器501与通信接口504分别通过通信总线503与处理器502连接。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤或数字用户线)或无线(例如红外、无线或微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘SolidState Disk)等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (20)
1.一种换肤方法,其特征在于,应用于终端设备,所述方法包括:
获取第一用户界面上所有可换肤的UI控件,所述第一用户界面为目标应用程序中已加载的任一用户界面,所述目标应用程序为所述终端设备中具有换肤功能的应用程序;
通过对每个所述可换肤的UI控件执行换肤操作,对所述第一用户界面进行换肤,其中,所述换肤操作包括:
根据所述可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略,所述换肤策略携带有控件类型标识和换肤属性标识,所述换肤策略集合存储有所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,在所述换肤策略集合中存在针对不同控件类型的UI控件的同一属性的多个换肤策略,当不同控件类型的UI控件具有相同的某一属性时,所述终端设备用于根据控件类型和换肤属性从所述换肤策略集合中获取每种控件类型的UI控件的每个属性对应的换肤策略;
采用所述换肤策略对所述可换肤的UI控件进行换肤。
2.根据权利要求1所述的方法,其特征在于,所述换肤策略集合用于存储所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,在对每个所述可换肤的UI控件执行换肤操作之前,所述方法还包括:
在所述第一用户界面的页面加载过程中,获取所述第一用户界面上的所有控件类型;
当所述换肤策略集合中未存储有目标控件类型对应的换肤策略时,获取所述目标控件类型对应的所有换肤策略,所述目标控件类型为所述第一用户界面上的任一控件类型;
将所述目标控件类型对应的所有换肤策略存储至所述换肤策略集合中。
3.根据权利要求2所述的方法,其特征在于,所述获取所述目标控件类型对应的所有换肤策略,包括:
基于所述目标控件类型,从策略分组集合中获取目标策略检索信息,所述策略分组集合中存储有多个策略检索信息,每个所述策略检索信息用于指示获取一种控件类型对应的所有换肤策略,所述目标策略检索信息包括所述目标控件类型的策略检索信息;
获取所述目标策略检索信息指示获取的所有换肤策略,并将所述目标策略检索信息指示获取的所有换肤策略作为所述目标控件类型对应的换肤策略。
4.根据权利要求3所述的方法,其特征在于,当控件类型为所述目标控件类型的UI控件具有父类UI控件时,所述目标策略检索信息还包括所述父类UI控件的控件类型的策略检索信息。
5.根据权利要求3所述的方法,其特征在于,在将所述目标控件类型对应的所有换肤策略存储至所述换肤策略集合中之后,所述方法还包括:
删除所述策略分组集合中的所述目标策略检索信息。
6.根据权利要求3至5任一所述的方法,其特征在于,所述方法还包括:
在所述目标应用程序的启动初始阶段,生成所述策略分组集合,所述策略分组集合中包括所述目标应用程序的开发模块中定义的所有策略检索信息,所述终端设备中存储有所述目标应用程序的开发模块中的所有策略检索信息指示获取的所有换肤策略。
7.根据权利要求6所述的方法,其特征在于,所述目标应用程序的开发模块包括多个开发子模块,所述生成所述策略分组集合,包括:
创建初始策略分组集合,所述初始策略分组集合为空集合;
分别获取每个所述开发子模块中定义的策略检索信息;
将所有所述开发子模块中定义的策略检索信息均存储至所述初始策略分组集合,得到所述策略分组集合。
8.根据权利要求6所述的方法,其特征在于,所述换肤策略的Java类以及所述策略检索信息的Java类均由注解处理工具在所述目标应用程序的开发阶段,对Java注解进行处理生成。
9.根据权利要求2至5任一所述的方法,其特征在于,所述方法还包括:
在所述目标应用程序的启动初始阶段,创建空集合,并将所述空集合作为所述换肤策略集合。
10.一种换肤装置,其特征在于,应用于终端设备,所述装置包括:
第一获取模块,用于获取第一用户界面上所有可换肤的UI控件,所述第一用户界面为目标应用程序中已加载的任一用户界面,所述目标应用程序为所述终端设备中具有换肤功能的应用程序;
换肤模块,用于通过对每个所述可换肤的UI控件执行换肤操作,对所述第一用户界面进行换肤,其中,所述换肤操作包括:
根据所述可换肤的UI控件的控件类型以及换肤属性,基于换肤策略集合获取换肤策略,所述换肤策略携带有控件类型标识和换肤属性标识,所述换肤策略集合存储有所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,在所述换肤策略集合中存在针对不同控件类型的UI控件的同一属性的多个换肤策略,当不同控件类型的UI控件具有相同的某一属性时,所述终端设备用于根据控件类型和换肤属性从所述换肤策略集合中获取每种控件类型的UI控件的每个属性对应的换肤策略;
采用所述换肤策略对所述可换肤的UI控件进行换肤。
11.根据权利要求10所述的装置,其特征在于,所述换肤策略集合用于存储所述目标应用程序中已加载的用户界面上的所有控件类型的可换肤的UI控件对应的换肤策略,所述装置还包括:
第二获取模块,用于在所述第一用户界面的页面加载过程中,获取所述第一用户界面上的所有控件类型;
第三获取模块,用于当所述换肤策略集合中未存储有目标控件类型对应的换肤策略时,获取所述目标控件类型对应的所有换肤策略,所述目标控件类型为所述第一用户界面上的任一控件类型;
存储模块,用于将所述目标控件类型对应的所有换肤策略存储至所述换肤策略集合中。
12.根据权利要求11所述的装置,其特征在于,所述第三获取模块,用于:
基于所述目标控件类型,从策略分组集合中获取目标策略检索信息,所述策略分组集合中存储有多个策略检索信息,每个所述策略检索信息用于指示获取一种控件类型对应的所有换肤策略,所述目标策略检索信息包括所述目标控件类型的策略检索信息;
获取所述目标策略检索信息指示获取的所有换肤策略,并将所述目标策略检索信息指示获取的所有换肤策略作为所述目标控件类型对应的换肤策略。
13.根据权利要求12所述的装置,其特征在于,当控件类型为所述目标控件类型的UI控件具有父类UI控件时,所述目标策略检索信息还包括所述父类UI控件的控件类型的策略检索信息。
14.根据权利要求12所述的装置,其特征在于,所述装置还包括:
删除模块,用于删除所述策略分组集合中的所述目标策略检索信息。
15.根据权利要求12至14任一所述的装置,其特征在于,所述装置还包括:
生成模块,用于在所述目标应用程序的启动初始阶段,生成所述策略分组集合,所述策略分组集合中包括所述目标应用程序的开发模块中定义的所有策略检索信息,所述终端设备中存储有所述目标应用程序的开发模块中的所有策略检索信息指示获取的所有换肤策略。
16.根据权利要求15所述的装置,其特征在于,所述目标应用程序的开发模块包括多个开发子模块,所述生成模块,用于:
创建初始策略分组集合,所述初始策略分组集合为空集合;
分别获取每个所述开发子模块中定义的策略检索信息;
将所有所述开发子模块中定义的策略检索信息均存储至所述初始策略分组集合,得到所述策略分组集合。
17.根据权利要求15所述的装置,其特征在于,所述换肤策略的Java类以及所述策略检索信息的Java类均由注解处理工具在所述目标应用程序的开发阶段,对Java注解进行处理生成。
18.根据权利要求11至14任一所述的装置,其特征在于,所述装置还包括:
创建模块,用于在所述目标应用程序的启动初始阶段,创建空集合,并将所述空集合作为所述换肤策略集合。
19.一种换肤装置,其特征在于,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器在运行所述可执行指令时,能够实现权利要求1至9任一所述的换肤方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在处理组件上运行时,使得所述处理组件执行权利要求1至9任一所述的换肤方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910394882.7A CN112015497B (zh) | 2019-05-13 | 2019-05-13 | 换肤方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910394882.7A CN112015497B (zh) | 2019-05-13 | 2019-05-13 | 换肤方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015497A CN112015497A (zh) | 2020-12-01 |
CN112015497B true CN112015497B (zh) | 2022-04-29 |
Family
ID=73500373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910394882.7A Active CN112015497B (zh) | 2019-05-13 | 2019-05-13 | 换肤方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015497B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113296863A (zh) * | 2021-05-26 | 2021-08-24 | 平安国际智慧城市科技股份有限公司 | 基于ios系统的动态换肤方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105498208A (zh) * | 2015-12-28 | 2016-04-20 | 网易(杭州)网络有限公司 | 界面显示方法、装置及游戏系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646038B (zh) * | 2012-02-28 | 2015-02-18 | 广州市动景计算机科技有限公司 | 控件内容展现方法、控件内容展现装置以及移动终端 |
CN104077114B (zh) * | 2013-03-26 | 2018-08-07 | 联想(北京)有限公司 | 一种更换应用软件的显示界面的方法及电子设备 |
CN103823676B (zh) * | 2014-02-14 | 2018-01-30 | 珠海市君天电子科技有限公司 | 显示控制方法、装置和客户端 |
CN104731590B (zh) * | 2015-03-13 | 2018-04-27 | 广东欧珀移动通信有限公司 | 一种用户界面控件实现方法及装置 |
CN109284165B (zh) * | 2018-10-30 | 2021-11-09 | 武汉斗鱼网络科技有限公司 | 客户端换肤方法、装置、设备及计算机可读存储介质 |
CN109614101B (zh) * | 2018-11-12 | 2022-05-24 | 深圳和而泰数据资源与云技术有限公司 | 页面生成方法、系统、装置、计算机设备及存储介质 |
-
2019
- 2019-05-13 CN CN201910394882.7A patent/CN112015497B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105498208A (zh) * | 2015-12-28 | 2016-04-20 | 网易(杭州)网络有限公司 | 界面显示方法、装置及游戏系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112015497A (zh) | 2020-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
FI118311B (fi) | Menetelmä, tietojenkäsittelylaite, tietokoneohjelmatuote ja järjestely elektronisen datan prosessointiin | |
KR101150065B1 (ko) | 개발자가 시스템 상의 기지의 위치를 용이하게 찾아내거나확장할 수 있게 해주는 기능 | |
US9424025B2 (en) | Verification of backward compatibility of software components | |
US9317681B2 (en) | Information processing apparatus, information processing method, and computer program product | |
US7568196B2 (en) | Initializing virtual machine that subsequently executes application | |
US20140237443A1 (en) | System and method for supporting intelligent design pattern automation | |
US11741002B2 (en) | Test automation systems and methods using logical identifiers | |
US8307304B2 (en) | Screen processing apparatus, information processing method, and computer program product | |
US7461337B2 (en) | Exception markup documents | |
CN114995859A (zh) | 页面热更新方法、装置、设备及存储介质 | |
CN112015497B (zh) | 换肤方法及装置 | |
JP2006276953A (ja) | 画面定義データ差分抽出方法、装置及びプログラム | |
CN114398086B (zh) | 驱动配置管理方法、装置、介质、设备及系统 | |
US20180349102A1 (en) | Apparatus and method for converting large-scale application | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN111158777B (zh) | 组件调用方法、装置及计算机可读存储介质 | |
CN106227713B (zh) | 文档的处理方法及装置 | |
US7797308B2 (en) | Managing multiple languages in a data language | |
CN112764802A (zh) | 一种业务逻辑定制方法、装置、电子设备和存储介质 | |
JP2007193435A (ja) | 情報処理端末、プログラム | |
CN113032004A (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
CN117311799B (zh) | 一种软件项目页面的配置方法 | |
CN112311931B (zh) | 一种在终端处理联系人信息的方法、装置和电子设备 | |
CN109358899B (zh) | 共享货架中资源版本的更新方法及装置 | |
CN116360754A (zh) | 页面的生成方法及装置 |
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 |