Android:找出哪个字体文件适合我要显示的字符

Android:找出哪个字体文件适合我要显示的字符,第1张

概述我正在维护一个Android应用,人们可以使用它来显示各种外来语言(例如藏文或古希腊文)中的字符串.由于Android设备几乎没有字体,因此用户可以将字体文件放在SD卡上,应用程序将使用它们.问题:给定一个字符串,我如何自动确定哪个字体文件最合适,以使该字符串出现而不会用正方形/框替换

我正在维护一个Android应用,人们可以使用它来显示各种外来语言(例如藏文或古希腊文)中的字符串.由于AndroID设备几乎没有字体,因此用户可以将字体文件放在SD卡上,应用程序将使用它们.

问题:给定一个字符串,我如何自动确定哪个字体文件最合适,以使该字符串出现而不会用正方形/框替换字符?

笔记:

>每个字符串都使用一种语言.
>字符串显示在WebVIEw中.
>自定义字体有效,唯一的问题是确定使用哪个字体文件.
>除了提供单个字体,它还可以提供该字符串可接受的字体列表.

对于不必要的上下文,出于好奇:我正在尝试开发此功能:
http://code.google.com/p/ankidroid/issues/detail?id=779

更新:我最终根据Mostafa的想法创建了Antisquare开源库.
它有一个getSuitableFonts方法,速度非常快.

解决方法:

AndroID本身无法提供足够的功能来完成此类任务.在AndroID中加载和渲染字体是在使用C语言编写的Skia中进行的.Skia会检测是否无法在字体中找到一个字符,然后回退到此类字符的另一种字体(不是整个字符串).这就是在AndroID中显示日语,希伯来语或阿拉伯语文本的方式,这正是这些脚本没有粗体字的原因! (通过回退选择其字体,而回退仅选择一个字体文件.)

不幸的是,API中未提供此机制,因此您必须自己构建类似的东西.看起来很复杂,但是比看起来容易.您要做的就是:

>准备每个字体文件中可用的字符列表.
>对于每个字符串,请找到该字符串中包含更多字符的字体.

获取每种字体中的字符列表

您不必在AndroID应用程序中即时执行此 *** 作.您可以准备每种字体中的字符列表,并将这些列表放入应用程序中.我说这是因为,使用可能在AndroID中不可用的工具,可以更轻松地进行此 *** 作.我可以通过字体应用程序中的Python脚本来做到这一点(大多数严肃的字体工具都具有出色的Python脚本环境),但是这些应用程序非常昂贵,并且适合认真的类型设计人员.由于您是AndroID开发人员,因此我建议使用sfntly,这是Java和C语言中的库.轻松执行所需的 *** 作(在字体文件中获取可用的Unicode字符列表)非常容易. This sample适用于CMap表(保存字符到字形映射的表),对于您来说应该是一个很好的起点.

现在有趣的部分是snftly是Java的,您可以将其包含在AndroID应用程序中并自动执行所有 *** 作.太棒了,我建议您先熟悉一下.

选择字体

在上一部分之后,您将获得每种字体的Unicode字符列表,并且基于这些列表,选择提供每个字符串的大多数字符的字体文件非常简单.

总结

以上是内存溢出为你收集整理的Android:找出哪个字体文件适合我要显示的字符全部内容,希望文章能够帮你解决Android:找出哪个字体文件适合我要显示的字符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1084674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存