gpt4 book ai didi

Android 字体 Assets 与字体资源 (API 26)

转载 作者:行者123 更新时间:2023-11-29 18:35:20 24 4
gpt4 key购买 nike

为了在 Android 应用程序中使用自定义字体,似乎有两种方法:

  1. 经典方式:将TTF或OTF文件放在/assets/fonts目录下,然后构建TypefaceTypeface.createFromAsset(getAssets(), "fonts/custom.ttf") .
  2. 自 API 26 起原生,或自 API 16 起使用 AppCompat:create an XML font family通过将小写的 TTF/OTF 文件放在 res/font 文件夹中,然后使用 android:fontFamily="@font/custom" 在 XML 布局中直接引用它们,或以编程方式访问它们与 ResourcesCompat.getFont(this, R.font.custom) .

字体资源和 Assets 之间的主要区别是什么?

具体来说,它们是否以相同的方式呈现,它们中的任何一个在性能方面是否更快或更高效?

是否可以假设字体资源仅适用于 APK 中预打包的字体,而字体资源更加灵活,因为您可以从 APK 内部或外部的任意文件创建字体?

更新:经过一些实验后,字体资源似乎是在 AppWidget TextView 中设置自定义字体的唯一方法,无需手动将它们绘制为位图,但这需要设备实际运行 API 26(使用支持库在这种特定情况下没有帮助)。

最佳答案

Specifically, are they rendered in the same way, and is any of them faster or more efficient in terms of performance?

ResourcesCompat.getFont 的工作方式如下:

  1. 如果我们已经将字体资源 ID 解析为 Typeface,请检查内存缓存。如果我们成功了,我们就完成了。
  2. 将资源复制到磁盘文件。
  3. 使用 Typerface.createFromFile 从文件创建 Typeface 并将其缓存。

APK 中 bundle 的字体也是如此。我不会深入探讨可下载字体的工作原理。您可以探索 in the docsin the source .

这两种方法的工作原理相同。他们从源创建一个 Typeface 对象。

一个关键区别:如果您直接使用 Typeface API,则您负责缓存。您不想多次加载相同的字体,因为每个 Typeface 实例都会占用大量内存。

过去,我使用的是 this code from Calligraphy从 Assets 加载字体时注意缓存。

After a bit of experimentation it looks like font resources are the only way to set custom fonts in AppWidget TextViews [...]

看来你是对的。通知和小部件(任何使用 RemoteViews 的东西)只能在 View 上使用 native 可用的资源和属性。

另请参阅:How to use a custom typeface in a widget?

关于Android 字体 Assets 与字体资源 (API 26),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54607143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com