为了在android应用中使用自定义字体,似乎有两种方法:
/assets/fonts
目录中,然后使用Typeface
构建Typeface.createFromAsset(getAssets(), "fonts/custom.ttf")
。res/font
文件夹中,然后直接在XML布局中使用android:fontFamily="@font/custom"
,或使用ResourcesCompat.getFont(this, R.font.custom)
以编程方式访问它们。字体资源和资产之间要记住的主要区别是什么?
具体来说,它们是否以相同的方式呈现,并且它们中的任何一个在性能方面都更快或更有效吗?
是否可以假定字体资源仅适用于预包装在APK中的字体,而字体资产更灵活,因为可以从APK内部或外部的任意文件创建字样?
更新:
经过一些试验,看起来字体资源是在AppWidget TextView
中设置自定义字体的唯一方法,而无需手动将其绘制为位图,但这需要设备实际运行API 26(使用支持库在这种情况下无济于事)。
答案 0 :(得分:0)
具体来说,它们是否以相同的方式呈现,并且它们中的任何一个在性能方面都更快或更有效吗?
ResourcesCompat.getFont
的工作方式如下:
Typeface
。如果我们成功了,那就完成了。Typeface
从文件创建Typerface.createFromFile
并将其缓存。对于APK中捆绑的字体来说确实如此。我不会研究可下载字体的工作方式。您可以浏览该in the docs或in the source。
两种方法的工作原理相同。他们从源头创建一个Typeface
对象。
一个主要区别:如果您直接使用Typeface
API,则负责缓存。您不想多次加载相同的字体,因为每个{{ 1}}实例占用大量内存。
从历史上看,我从资产加载字体时使用this code from Calligraphy进行缓存。
经过一些试验,看起来字体资源是在AppWidget TextViews中设置自定义字体的唯一方法[...]
看起来您是对的。通知和小部件(任何使用RemoteViews
的东西)只能使用视图上的本机可用资源和属性。