Android 上设置的默认字体

Posted

技术标签:

【中文标题】Android 上设置的默认字体【英文标题】:Default font set on Android 【发布时间】:2011-10-12 04:52:02 【问题描述】:

谁能告诉我大多数 android 设备上捆绑的字体是什么,特别是网页?

就像Windows has their bundled fonts 或Mac font lists,大多数Android 手机和平板电脑都有哪些字体?任何人都可以指向网络上的列表吗?

我正在制作网页,并希望设置我的 CSS 以优雅地从使用较新的字体降级为普通的“无衬线”和“衬线”字体系列。谢谢。

【问题讨论】:

另一个不错的平台列表是iosfonts.com 【参考方案1】:

这里已经回答了这个问题:How to retrieve a list of available/installed fonts in android? Android 中只有 3 种字体可用;普通(Droid Sans)、衬线(Droid Serif)和等宽(Droid Sans Mono)。

【讨论】:

嗯,还没有完全回答。那是针对应用程序的。网页呢?每个应用程序都必须捆绑自己的字体吗?例如所以 Firefox Mobile 必须嵌入一组默认的 TT 字体? 从我读过的所有内容来看,默认的 3 种字体似乎也适用于 Android WebKit 浏览器。您应该能够使用 CSS @font 规范从 Web 加载字体。也可以在您的应用程序中包含 TT 字体,在这种情况下,您可以在活动中使用它们,或者使用 CSS url 规范将它们加载到 WebView 中。见:mail-archive.com/android-developers@googlegroups.com/…***.com/questions/1344080/…***.com/questions/5908680/… 从 android 4.1 - JellyBean 开始,以下 Roboto 字体系列可用:***.com/a/13329907/502187 似乎没有人回答这个问题,这与Android浏览器中的网络字体有关,而不是在应用程序中使用的字体。【参考方案2】:

从 Android 4.1 你可以使用这个例如:

字体系列:无衬线灯;

【讨论】:

【参考方案3】:

http://www.granneman.com/webdev/coding/css/fonts-and-formatting/default-fonts/#android

显然在 4.0 之前的 android 上只能指定 3 种字体:

Droid Sans Droid Serif Droid Sans Mono

我猜它们会转换为默认的 CSS (即 sans-serifserifmono

【讨论】:

【参考方案4】:

Post 4.0 Androïd 使用“Roboto”字体。 你可以在这里找到 Androïd 的规格: http://developer.android.com/design/style/typography.html

【讨论】:

【参考方案5】:

扩展 Grstmo's answer:

system_fonts.xml 定义从字体系列到实际字体文件的映射。所以让我们试试这些:

<div style="font-family: sans-serif; font-style: normal">Regular</div>
<div style="font-family: sans-serif; font-style: italic">Italic</div>
<div style="font-family: sans-serif; font-weight: bold">Bold</div>
<div style="font-family: sans-serif; font-weight: bold; font-style: italic">Bold-italic</div>

<div style="font-family: sans-serif-light; font-style: normal">Light</div>
<div style="font-family: sans-serif-light; font-style: italic">Light-italic</div>

<div style="font-family: sans-serif-thin; font-style: normal">Thin</div>
<div style="font-family: sans-serif-thin; font-style: italic">Thin-italic</div>

<div style="font-family: sans-serif-condensed; font-style: normal">Condensed regular</div>
<div style="font-family: sans-serif-condensed; font-style: italic">Condensed italic</div>
<div style="font-family: sans-serif-condensed; font-weight: bold">Condensed bold</div>
<div style="font-family: sans-serif-condensed; font-weight: bold; font-style: italic">Condensed bold-italic</div>

<div style="font-family: serif; font-style: normal">Serif Regular</div>
<div style="font-family: serif; font-style: italic">Serif Italic</div>
<div style="font-family: serif; font-weight: bold">Serif Bold</div>
<div style="font-family: serif; font-weight: bold; font-style: italic">Serif Bold-italic</div>

<!-- "Droid Sans" actually gives you Roboto. -->
<div style="font-family: &quot;Droid Sans&quot;; font-style: normal">Droid Sans Regular</div>
<div style="font-family: &quot;Droid Sans&quot;; font-weight: bold">Droid Sans Bold</div>

<div style="font-family: monospace; font-style: normal">Monospace Regular</div>

http://jsfiddle.net/9z3tD/4/ => (在安卓 4.2 上测试)

编辑:屏幕截图中的“Droid Sans”显然是 Roboto。 配置支持它,但结果是 the underlying file is a simlink: DroidSans.ttf -&gt; Roboto-Regular.ttf, DroidSans-Bold.ttf -&gt; Roboto-Bold.ttf

编辑:我是否引用姓氏似乎并不重要(http://jsfiddle.net/9z3tD/9/ 呈现相同)。 CSS 区分像serif 这样的通用关键字和引用的"serif",后者指的是名称恰好是“serif”的字体;但是 xml 配置没有区别,所以我 guess 在 android 中,两种语法都指的是名称为“serif”的字体。但是如果您创建自定义 WebView 并将其配置为将通用关键字映射到其他字体(setSerifFontFamily() 和朋友),可能会有所不同。

然后是fallback_fonts.xml。这些没有名字;例如你不能说font-family: "Droid Sans Fallback"。 但所有这些都应该针对其他字体中每个缺失的字形进行尝试。据推测,甚至可以使用"elegant""compact" 中的font-variant 并通过设置文本lang="ja" 来选择一个子集? 但是我根本没有看到 Droid Sans Fallback 被使用,所以也许后备在 WebKit 中不起作用:-(


免责声明:以上内容适用于使用普通浏览器和/或 Chrome 的普通 Android。我相信它也适用于 WebView(使用默认配置)但尚未测试。

理论上,制造商可以使用其他字体,例如我听说三星这样做了。在实践中screenshots on all android devices BrowserStack had 所有人——包括三星——在我未经训练的眼睛看来是 Roboto 或 Droid,区别只是 android 版本...... 但是这里是Galaxy S3 caught not aliasing Georgia to serif,所以 something 不同。

Firefox 是一个很好的例子,展示了不同浏览器的做法——他们切换到Open Sans and Charis SIL Compact,然后是replaced Open Sans with Clear Sans。 完整配置位于 libpref/init/all.js 中,并且取决于语言。 据我所知,Firefox 忽略 system_fonts.xml 的别名,例如Georgia 生成无字体。 OTOH,旧版本(测试 30、34)allowed you to refer to system fonts by name, even to Droid Sans Fallback 但这个doesn't work on FF 36, 37(这两个结果是针对http://codepen.io/cben/pen/VYgPEE,使用 Adob​​eBlank 意味着当您看到字符时,使用了该字体)。


另请参阅relevant answer,了解应用程序可用的字体。

【讨论】:

看起来文件现在在data/fonts/fonts.xml?【参考方案6】:

我已经测试了一段时间,有 3 种标准字体 - WebView 的系列类型:

衬线, 无衬线字体, 等宽。 我一直在用 javascript 加载(我尝试了来自http://www.w3schools.com/cs-s-ref/css_websafe_fonts.asp 的不同组合,其中放置了常用组合表):

myWebView.loadUrl("javascript:document.body.style.fontFamily=\"Impact, Charcoal, sans-serif\";");

所以,下面的代码没有区别:

myWebView.loadUrl("javascript:document.body.style.fontFamily=\"sans-serif\";");

我得到了同样的结果。在 4.2.2 上测试。

奇怪但快递也可以,看起来有点像等宽。

【讨论】:

以上是关于Android 上设置的默认字体的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS 媒体查询检测 Android 设备的默认字体大小?

默认情况下为Android中的TextView设置不同的字体[重复]

Android中通过typeface设置字体

Android中的默认字体系列是啥?

Android设置TextView的字体

如何设置Android华为手机字体