android - 有没有办法在 StaticLayout 中退回到 Typeface.SERIF?

标签 android android-typeface android-paint

我正在创建一个自定义 View 类,它使用 StaticLayout 和从 .ttf Assets 文件加载的自定义字体来显示文本。字体的基本外观是衬线字体,字体文件中的 TrueType 属性表明它是衬线字体。然而,对于字体中没有的字符,Android 会回退到无衬线字体(它看起来像 Roboto 或 Noto,具体取决于 Android 版本)。

有没有办法控制它,使 Android 布局引擎回退到衬线字体? (比如传递给 Paint#setFontFeatureSettings() 的一些魔法字符串,或者可能是一种指定用于 Paint 的字体堆栈的方法?)

任何解决方案都必须在分发应用程序时起作用,因此无法使用 Android 的系统配置文件玩游戏。另外,我知道 this question (四年后仍然没有答案),但我的问题有点不同,尽管这两个问题的解决方案很可能是相同的。

最佳答案

从 Lollipop 开始,有一个名为 FontFamily 的隐藏类和一个名为 Typeface.createFromFamilies 的隐藏方法.如果您非常小心,您可能可以通过反射或其他技巧使用这些东西,但要准备好回退到公共(public) API。

关于android - 有没有办法在 StaticLayout 中退回到 Typeface.SERIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38911683/

相关文章:

Android:Textview 不能加粗/斜体

java - Java中的克隆对象

java - 安卓端口转发

java - 我的微调器仅加载列表中的第一个数据(字符串)

Android mp android chart set type face for XAxisLeft

android - 如何在 DrawerLayout 和 NavigationView 中使用自定义字体

android - 将字母间距设置为 drawTextOnPath

java - 如何在 Canvas 上水平居中文本

android - 在不覆盖 dispatchTouchEvent() 的情况下检测每个触摸事件?

java - 绘制属性在应用两次时不起作用