android – 基于String内语言的TextView自定义字体

android – 基于String内语言的TextView自定义字体,第1张

概述我有两个字体ttf文件,必须基于String内的语言应用于TextView.所以例如考虑这个示例文本: hey what’s up ضعيف 我可以根据语言应用typeface span,但它需要在从我们的服务器获取的每个字符串中自定义标记,例如 <ttf1>hey what's up <ttf1><ttf2>ضعيف</ttf2> 并且在运行时解析每个String将会影响性能.有没有其他方法来实 我有两个字体ttf文件,必须基于String内的语言应用于TextVIEw.所以例如考虑这个示例文本:

hey what’s up ضعيف

我可以根据语言应用typeface span,但它需要在从我们的服务器获取的每个字符串中自定义标记,例如

<ttf1>hey what's up <ttf1><ttf2>ضعيف</ttf2>

并且在运行时解析每个String将会影响性能.有没有其他方法来实现这一目标?

首先,我想说我需要这样做只是为了文本的方向,即RTL和LTR所以在上面的例子中,英语是LTR而阿拉伯语是RTL.这有什么不同吗?

我尝试合并这两个字体文件,但有线高问题,如果我修复一个字体文件,它会被破坏其他文件.

解决方法 在某人的帮助下,我找到了比手动标记更优雅的解决方案:

String paragraph = "hey what's up ضعيف";int NO_FLAG = 0;BIDi bIDi = new BIDi(paragraph,NO_FLAG);int runcount = bIDi.getruncount();for (int i = 0; i < runcount; i++) {    String ltrtl = bIDi.getRunLevel(i) % 2 == 0 ? "ltr" : "rtl";    String subString = paragraph.substring(bIDi.getRunStart(i),bIDi.getRunlimit(i));    Log.d(">>bIDi:" + i,subString+" is "+ltrtl);}

打印:

hey what’s up is ltr

ضعيف is rtl

所以现在可以根据语言方向轻松构建TypefaceSpan或MetricAffectingSpan,如下所示:

SpannableString spanString = new SpannableString(paragraph);for (int i = 0; i < runcount; i++) {    Object span = bIDi.getRunLevel(i) % 2 == 0 ? ltrFontSpan : rtlFontSpan;    spanString.setSpan(span,bIDi.getRunStart(i),bIDi.getRunlimit(i),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }textVIEw.setText(spanString);
总结

以上是内存溢出为你收集整理的android – 基于String内语言的TextView自定义字体全部内容,希望文章能够帮你解决android – 基于String内语言的TextView自定义字体所遇到的程序开发问题。

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

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

原文地址:https://www.54852.com/web/1127704.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存