如何在android中检索可用/已安装字体的列表?

Posted

技术标签:

【中文标题】如何在android中检索可用/已安装字体的列表?【英文标题】:How to retrieve a list of available/installed fonts in android? 【发布时间】:2011-04-01 17:40:33 【问题描述】:

在 Java 中我会这样做:

java.awt.GraphicsEnvironment ge = 
                      java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = ge.getAllFonts(); 

是否有 android 等价物?

【问题讨论】:

【参考方案1】:

摘自 Mark Murphy 在 Android 开发者邮件列表中的回答:

http://developer.android.com/reference/android/graphics/Typeface.html

只有三种字体:普通 (Droid Sans)、衬线 (Droid Serif) 和 等宽(Droid Sans Mono)。

虽然可能有其他字体 埋在 WebKit 的某个地方,他们 似乎无法访问 WebKit 之外的开发人员。 :-(

唯一的其他字体是您与应用程序捆绑的任何 TrueType 字体。

编辑:Roboto 是 Android 4.0 附带的一种新字体。您可以使用这个库项目在所有版本中使用它,回到 API 级别 4 https://github.com/mcalliph/roboto-text-view

【讨论】:

我...实际上可以使用它...必须欣赏选项的简单性。 谁能说字体碎片? /jk 没问题。您可以使用任何您喜欢的字体并将其包含在您的项目中。完美运行 直到您从事 Web 开发工作,然后开始诅咒 Android 甚至不支持 Arial。真可惜。 只有Droid还是真的吗?这是什么机器人? developer.android.com/design/style/typography.html【参考方案2】:

关于实际问题,这是一种创建所有已安装字体列表的方法:

String path = "/system/fonts";
File file = new File(path);
File ff[] = file.listFiles();

数组 ff[] 将包含所有字体文件。

【讨论】:

如何使用特定的字体文件并在富文本中应用该字体? 这是对 OP 问题的实际答案。 如何识别特定字体是只有数字还是只有字母?我只想使用完整的字母数字+特殊字符集的字体。 我很抱歉@Vrajesh 没有回复 - 我刚刚收到 *** 关于这个线程的通知......我不确定你在问什么......如果你问的不仅仅是挑选从 ff[] 列表中提取一个字体文件,这超出了问题范围,此时我没有答案。 @Nougat,您的问题也属于该线程的问题。但是,我可以建议您尝试使用列表中的一种或多种字体打印所有字符,看看您会得到什么......(虽然可能有一种更短更有效的方法......)【参考方案3】:

只有 3 种字体可以作为 android 的一部分;普通(Droid Sans),衬线(Droid Serif), 和等宽(Droid Sans Mono)。

应用可以包含自己的 truetype 字体,但不能安装它们以供其他应用使用。

http://www.mail-archive.com/android-developers@googlegroups.com/msg44221.html

几个关于字体的链接:

http://www.forbes.com/2008/09/25/font-android-g1-tech-wire-cx_ew_0926font.html http://www.droidfonts.com/droidfonts/about/

【讨论】:

从 android 4.1 - JellyBean 开始,以下 Roboto 字体系列可用:***.com/a/13329907/502187【参考方案4】:

这个答案不是编程解决方案,但实际的 ttf 字体似乎存储在 /system/fonts 目录中。使用adb shell ls /system/fonts 列出它们,或使用adb pull /system/fonts 将它们全部传输到连接的计算机(adb 将创建一个名为“fonts”的文件夹)。

【讨论】:

【参考方案5】:

从Android 29开始,给你一个android.graphics.fonts.Font的实际集合,有SystemFonts.getAvailableFonts()

https://developer.android.com/reference/kotlin/android/graphics/fonts/SystemFonts?hl=en#getAvailableFonts()

【讨论】:

有了这个,我看到 288 个,而 Apostolos 的回答有 328 个文件【参考方案6】:

Android 包含 3 种基本字体,但与 ios 不同的是,它允许您使用几乎任何您喜欢的字体。您可以简单地将其嵌入到您的应用程序中,而不是像 Apple 那样受限于预设的字体列表(Apple 不允许字体嵌入)。很方便。

请注意,这是针对 Android 本身的,但网络浏览器(包括预装的基本 Android 网络浏览器)确实支持所有标准 HTML 字体。

【讨论】:

这不再是真的 - 除了 iOS 提供的 58 种字体系列之外,iOS 4+ 还允许应用嵌入自己的字体。 如果你没有用字体做任何不寻常的事情,那么这 58 个覆盖了整个范围:iosfonts.com 在 OP 一年多之后出现并使用您的答案作为抨击 iOS 的机会并没有帮助 - 并且无效。此答案中没有任何信息对 OP 或我们这些后来寻找问题答案的人有用。

以上是关于如何在android中检索可用/已安装字体的列表?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何获取已安装活动的列表,就像它们出现在启动器中一样,没有重复

如何解决ppt不可用字体无法保存

查看Android系统已安装应用的列表

如何获取已安装的 OLE DB 提供程序的列表?

如何获得Android手机的软件安装列表

如何获取 Android 11 中已安装应用程序的列表