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-serif
、serif
、mono
)
【讨论】:
【参考方案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: "Droid Sans"; font-style: normal">Droid Sans Regular</div>
<div style="font-family: "Droid Sans"; 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 -> Roboto-Regular.ttf
, DroidSans-Bold.ttf -> 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,使用 AdobeBlank 意味着当您看到字符时,使用了该字体)。
另请参阅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 设备的默认字体大小?