在安卓系统中如何获取可用/已安装字体列表?

40
在Java中,我会这样做:
java.awt.GraphicsEnvironment ge = 
                      java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = ge.getAllFonts(); 

有没有类似的Android版本?

6个回答

42

这是从马克·墨菲(Mark Murphy)在Android开发者邮件列表上的回答中摘取的:

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

只有三种字体可用:normal(Droid Sans),serif(Droid Serif)和monospace(Droid Sans Mono)。

虽然WebKit中可能还有其他字体,但它们似乎无法由WebKit之外的开发人员访问。 :-(

唯一的其他字体是您打包到应用程序中的任何TrueType字体。

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


5
我可以实际运用它……得欣赏选项的简洁。 - hndcrftd
1
有人能说一下字体碎片化吗?/开个玩笑 - Marius
4
直到你从事网络开发工作,开始因为Android甚至不支持Arial而咒骂。这真是令人悲哀。 - Antony
Roboto是一种新字体,随Android 4.0推出。您可以使用此库项目将其用于API级别4及更早版本 https://github.com/mcalliph/roboto-text-view - matto1990
我不明白为什么这被标记为答案,因为它没有解决“列出已安装字体”的问题。Apostolos的回答应该被接受。 - Renato Back
显示剩余2条评论

29

关于实际问题,以下是创建已安装的所有可用字体列表的方法:

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

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


如何使用特定的字体文件并在富文本中应用该字体? - Vrajesh
这就是对于问题提出者的实际答案。 - user-44651
如何确定特定字体是否仅包含数字或仅包含字母?我想只使用完整的字母数字和特殊字符集。 - Myth
很抱歉@Vrajesh,我没有回复你 - 我刚刚在stackoverflow的这个帖子上收到了通知...我不确定你在问什么...如果你问的不仅仅是从ff[]列表中挑选一个字体文件,那就超出了问题范围,目前我没有答案。 - Apostolos
@Nougat,你的问题超出了这个帖子的问题范围。不过,我可以建议你尝试使用列表中的一个或多个字体打印所有字符,看看你得到什么...(可能有更短更有效的方法...) - Apostolos
@Apostolos 谢谢您的回复。 - Myth

9

Android只提供三种字体:普通字体(Droid Sans),衬线字体(Droid Serif)和等宽字体(Droid Sans Mono)。

应用程序可以包含自己的TrueType字体,但无法安装它们以供其他应用程序使用。

  • 这里有关于字体的链接。

以下是一些有关字体的链接:

  • 这里是关于字体的文章。
  • 这里是关于Droid字体的介绍。

1
从Android 4.1 - JellyBean开始,以下Roboto字体系列可用:https://dev59.com/-2ct5IYBdhLWcg3wZMfn#13329907 - user502187

1

通过这个,我看到了288个文件,而Apostolos的答案中有328个文件。 - clwhisk

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

-3

Android 包含 3 种基本字体,但与 iOS 不同,允许您使用几乎任何您喜欢的字体。您可以将其与应用程序一起嵌入,而不是像 Apple 那样被限制在预设字体列表中(Apple 不允许字体嵌入)。非常方便。

请注意,这仅适用于 Android 本身,但 Web 浏览器(包括预装的基本 Android Web 浏览器)支持所有标准 HTML 字体。


21
这个说法已经不再正确了 - iOS 4及以上版本允许应用程序嵌入自己的字体,除了iOS提供的58种字体家族外。 - wildcard
8
如果你在字体选择上没有太过离谱的话,这58种字体可以满足你的所有需求:http://iosfonts.com - user481081
6
对于一个回答者在一年之后跟随原帖来此回答并仅仅将其作为抨击 iOS(并且还不成功地)的机会并不是有益的。这个回答中没有任何对于原帖作者或是后来寻求答案的人有用的信息。 - Craig

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