本发明涉及一种线性缩放技术领域,尤其涉及一种textview线性缩放方法、装置、设备及介质。
背景技术:
在安卓系统下,有许多支持笔记标记的应用程序,在这些应用程序中,内容文本和笔记控件通常是相互分离的独立组件,当对不同设备上的文本和笔记进行对齐操作时,就需要将文本和笔记按照设备分辨率进行等比例线性缩放。
笔记的线性缩放可以通过缩放笔记坐标点进行,但是对基于textview展示的文本内容进行线性缩放时,会由于android系统textview测量过程的非线性,而导致文本内容字符宽度非线性,产生换行点不一致和笔记无法对齐的问题。
技术实现要素:
为了克服现有技术的不足,本发明的目的之一在于提供一种textview线性缩放方法,其通过对字符类型及字体库进行预设限定,并对画笔标志添加线性标志,进而使得textview在线性缩放时文本换行点一致并且笔记线性对齐。
本发明的目的之一采用以下技术方案实现:
一种textview线性缩放方法,包括以下步骤:
根据预设textsize字符类型接收输入字符;
在所述输入字符的画笔标志位处配置线性标志;
根据预设字体库为所述输入字符匹配字体,所述预设字体库为覆盖所有展示字符集合的字体库;
根据textview宽度及所述字符的字体特征,计算所述输入字符宽高;
根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符。
进一步地,所述预设textsize字符类型为整型。
进一步地,所述预设字体库为通过settypeface指定的字体库。
进一步地,根据textview宽度及所述输入字符的字体特征,计算所述输入字符的宽高,还包括以下步骤:
调用所述输入字符的字体特征,并关闭字距调整功能;
根据所述字体特征进行所述输入字符宽高的计算。
进一步地,所述线性标志为通过setpaintflags配置的线性标志。
进一步地,根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符,包括以下步骤:
读取所述textview宽度及所述输入字符的宽高,所述textview宽度及所述输入字符的宽高为偶数;
计算当前设备及基准设备的像素比例,并将所述像素比例向下取值到0.5的整倍数,得到缩放比例系数;
根据所述缩放比例系数对所述textview控件及所述输入字符进行线性缩放。
进一步地,所述基准设备为显示区域为1024*768大小的设备。
本发明的目的之二在于提供一种textview线性缩放装置装置,其通过对字符类型及字体库进行预设限定,并对画笔标志添加线性标志,进而使得textview在线性缩放时文本换行点一致并且笔记线性对齐。
本发明的目的之二采用以下技术方案实现:
一种textview线性缩放装置,其包括:
接收模块,用于根据预设的textsize字符类型接收输入字符;
配置模块,用于在所述输入字符的画笔标志位处配置线性标志;
匹配模块,用于根据预设字体库为所述输入字符匹配字体,所述预设字体库为覆盖所有展示字符集合的字体库;
计算模块,用于根据textview宽度及字体,计算所述输入字符宽高;并根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符。
本发明的目的之三在于提供执行发明目的之一的电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,所述计算机程序被处理器执行时实现上述的textview线性缩放方法。
本发明的目的之四在于提供存储发明目的之一的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的textview线性缩放方法。
相比现有技术,本发明的有益效果在于:
本发明通过限定textview的字符类型,并从可以覆盖所有展示字符集合的字体库中匹配字体,进而控制字符的宽高,防止出现非线性缩放的问题,并且通过对画笔标志添加线性标志,使得画笔标志处不会出现非线性缩放的问题,避免出现换行点不一致和笔记无法对齐的问题。
附图说明
图1是实施例一的textview线性缩放方法的流程图;
图2是实施例一的计算字符宽高方法的流程图;
图3是实施例二的根据设备线性缩放方法的流程图;
图4是实施例三的textview线性缩放装置的结构框图;
图5是实施例四的电子设备的结构框图。
具体实施方式
以下将结合附图,对本发明进行更为详细的描述,需要说明的是,以下参照附图对本发明进行的描述仅是示意性的,而非限制性的。各个不同实施例之间可以进行相互组合,以构成未在以下描述中示出的其他实施例。
实施例一
实施例一提供了一种textview线性缩放方法,旨在通过对输入字符进行限定,以避免线性缩放时的非线性情况,防止出现换行点不一致和笔记无法对齐的问题。
textview指的是安卓(android)系统中的文本视图,通常安卓系统中app内的文字展示都需要通过textview来实现。
请参照图1所示,一种textview线性缩放方法,包括以下步骤:
s110、根据预设textsize字符类型接收输入字符;
在一些版本的安卓系统中,会对字符类型强制取整,这样一些浮点类型的输入字符会出现非线性缩放的问题,因此在本实施例中,预设字符类型统一设定为整型,即配置的textsize为整型。
s110中预设字符类型的目的是为了统一文本大小,避免不同字符类型的文本线性缩放时大小不一导致非线性的问题。
s120、在所述输入字符的画笔标志位处配置线性标志;;
s120中的画笔标志指的是textview中的画笔功能,例如文字加粗、添加下划线、添加抗锯齿标志等功能,由于系统会在画笔标志位不包含线性标志时对字符宽度进行四舍五入,从而导致画笔标志的非线性,因此,s120中会对所有画笔标志添加线性标志,以避免出现画笔标志非线性,导致线性缩放后画笔标志和输入字符不匹配的问题。
上述的线性标志为通过setpaintflags配置的线性标志。
s130、根据预设字体库为所述输入字符匹配字体,所述预设字体库为覆盖所有展示字符集合的字体库;
安卓系统在计算字体宽高时时结合了textsize和使用的字体库中的字符宽高,如果字体库中的字符不包含当前需要展示的字符,则系统会使用自己默认的字符,由于不同系统默认的字符宽度不同,会导致无法线性缩放的问题。因此,本实施例中,通过调用“settypeface”命令预设的字体库完成字体的匹配,上述的预设字体库为覆盖所有展示字符集合的字体库,由于不同app(应用程序)展示字符集合的字体不同,所以可以根据不同app设定不同的预设字体库,也可以是一个包含所有字体的字体库,本实施例不作具体字体库的限定。
通过规范文本的字体库,可以实现对字符宽高的线性控制。
s140、根据textview宽度及所述字符的字体特征,计算所述输入字符宽高;
在一些版本的安卓系统中,会对字体库中针对特定的相邻字符进行字距调整,导致字体宽度无法线性比例,这是由于系统会对已经计算好的字符宽度进行相邻字符的字距调整kerning(字偶距)过程,这会导致部分场景下的非线性;优选地,为了避免发生此种问题,可以通过关闭字距调整功能,即关闭kerning功能来实现。
具体地,请参照图2所示,包括以下步骤:
s1401、调用所述输入字符的字体特征,并关闭字距调整功能;
s1402、根据所述字体特征进行字符宽高的计算。
安卓系统会根据字符类型和字体自动计算字符的宽高,以适应textview的宽度,该计算方法是通用的计算方法,因此本实施例不对此作详细描述。
s150、根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符。
在完成上述步骤后,就可以实现textview在不同的android设备上线性缩放宽高。
实施例二
实施例二是在实施例一基础上进行的,其主要对textview控件整体宽度和文本大小在不同设备上按照线性缩放比例进行缩放的过程进行了说明。
具体地,请参照图3所示,根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符,包括以下步骤:
s210、读取所述textview宽度及所述输入字符的宽高,所述textview宽度及所述输入字符的宽高为偶数;
s220、计算当前设备及基准设备的像素比例,并将所述像素比例向下取值到0.5的整倍数,得到缩放比例系数;
需要说明的是,s210中textview宽度及输入字符的宽高限定为偶数,因为安卓系统中的控件宽度为整型,因此当需要严格控制精度时,就需要对控件宽度和文本大小设置为偶数,这是因为在s220中线性比例是0.5的整倍数,0.5的整倍数也是安卓系统的通用线性比例,所以偶数可以避免控件缩放之后的宽度为小数。
s220中的基准设备在本实施例中选用显示区域为1024*768大小的设备,计算像素比例时,是在文本布局方向上计算当前设备和基准设备的像素比例。
s230、根据所述缩放比例系数对所述textview控件及所述输入字符进行线性缩放。
实施例三
实施例三公开了一种对应上述实施例的textview线性缩放方法对应的装置,为上述实施例的虚拟装置结构,请参照图4所示,包括:
接收模块310,用于根据预设的textsize字符类型接收输入字符;
配置模块320,用于在所述输入字符的画笔标志位处配置线性标志;
匹配模块330,用于根据预设字体库为所述输入字符匹配字体,所述预设字体库为覆盖所有展示字符集合的字体库;
计算模块340,用于根据textview宽度及所述输入字符的字体特征,计算所述输入字符的宽高;并根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符。
优选地,根据textview宽度及所述输入字符的字体特征,计算所述输入字符的宽高,还包括以下步骤:
调用所述输入字符的字体特征,并关闭字距调整功能;
根据所述字体特征进行所述输入字符宽高的计算。
优选地,根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符,包括以下步骤:
读取所述textview宽度及所述输入字符的宽高,所述textview宽度及所述输入字符的宽高为偶数;
计算当前设备及基准设备的像素比例,并将所述像素比例向下取值到0.5的整倍数,得到缩放比例系数;
根据所述缩放比例系数对所述textview控件及所述输入字符进行线性缩放。
实施例四
图5为本发明实施例四提供的一种电子设备的结构示意图,如图5所示,该电子设备包括处理器410、存储器420、输入装置430和输出装置440;计算机设备中处理器410的数量可以是一个或多个,图5中以一个处理器410为例;电子设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的textview线性缩放方法对应的程序指令/模块(例如,textview线性缩放方法方法装置中的接收模块310、配置模块320、匹配模块330和计算模块340)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述实施例一和实施例二的textview线性缩放方法。
存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的用户身份信息、输入字符以及预设字体库等。输出装置440可包括显示屏等显示设备。
实施例五
本发明实施例五还提供一种包含计算机可执行指令的存储介质,该存储介质可用于计算机执行textview线性缩放方法,该方法包括:
根据预设textsize字符类型接收输入字符;
在所述输入字符的画笔标志位处配置线性标志;
根据预设字体库为所述输入字符匹配字体,所述预设字体库为覆盖所有展示字符集合的字体库;
根据textview宽度及所述输入字符的字体特征,计算所述输入字符宽高;
根据不同安卓设备,按比例线性缩放所述textview控件宽度及所述输入字符。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的基于textview线性缩放方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述基于textview线性缩放方法装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。