在StaticLayout中是否有回退到Typeface.SERIF的方法?

15

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

有没有一种方法可以控制这个行为,使得Android布局引擎回退到衬线字体?(比如可能传递给Paint#setFontFeatureSettings()的一些神奇字符串,或者在Paint中指定一组字体堆栈的方式?)

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

1个回答

0

从Lollipop版本开始,有一个名为FontFamily的隐藏类和一个名为Typeface.createFromFamilies的隐藏方法。如果你非常小心,可能可以通过反射或其他手段使用这些内容,但准备好回退到公共API。


不幸的是,从Android Pie开始,FontFamily类似乎在灰色列表中,因此即使通过反射也无法访问。(请参见https://developer.android.com/about/versions/pie/restrictions-non-sdk-interfaces)。 - Ted Hopp
是的,时间已经证明了我的建议明智,即能够回退到公共API哈哈。不幸的是,很多Android框架都是隐藏的,通常没有任何好的理由。例如,有一个公共方法可以创建一个ParcelFileDescriptor来复制一个FileDescriptor,但没有一个公共方法来采用它。这是从一开始就存在于ParcelFileDescriptor中的功能,但至今仍然隐藏着。Android充满了这种荒谬行为。 - j__m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接