可下载字体 - 无法下载一些谷歌字体

Gil*_*ibi 5 fonts android google-font-api google-fonts

我正在玩可下载字体 api。我下载了 Google 示例应用程序,并将代码合并到我的项目中。两者都运行成功,但某些字体始终无法从我的应用程序和示例应用程序下载。

我使用FontsContractCompat.requestFont并得到一个回调onTypefaceRequestFailed(int reason),原因是 1。文档说它的意思是“FAIL_REASON_FONT_NOT_FOUND”。我认为这些字体应该存在,因为:1)它们出现在示例应用程序附带的 xml 文件中,2)它们出现在Google Fonts在线列表中,以及 3)它们从开发人员 web api ( https://www.googleapis.com/webfonts/v1/webfonts?key=)

这是失败的字体列表: Angkor Archivo Asap Condensed Baloo Bhaijaan Baloo Tammudu Battambang Bayon Bellefair BioRhyme Expanded Bokor Cabin Condensed Chau Philomene One Chenla Content Dangrek Encode Sans Encode Sans Condensed Encode Sans Expanded Encode Sans Semi Condensed Encode Sans Semi Expanded Fasthand Faustina Freehand Hanuman Khmer Koulen Libre Barcode 128 Libre Barcode 128 Text Libre Barcode 39 Libre Barcode 39 Extended Libre Barcode 39 Extended Text Libre Barcode 39 Text Mada Manuale Metal Moul Moulpali Mukta Mukta Mahee Mukta Malar Nokora Open Sans Condensed Preahvihear Roboto Condensed Saira Saira Condensed Saira Extra Condensed Saira Semi Condensed Sedgwick Ave Sedgwick Ave Display Siemreap Suwannaphum Taprom Ubuntu Condensed Zilla Slab Zilla Slab Highlight

fat*_*ire 4

这绝对很奇怪。我观察到许多(但不是全部)这些字体没有“latin”或“latin-ext”子集,因此这似乎是自动过滤它们的一种方法。我编写了一个 python2 脚本,该脚本向 API 请求整个字体列表,然后过滤它们以查找“拉丁语”,并将剩下的内容输出为新的字体系列资源文件,您可以将其重定向到family_names.xml.

用法: fontlist.py <API_KEY>

#!/usr/bin/python
# fontlist.py by fat-tire
#
# Collects Google provider latin & latin-ext font families and creates a replacement for
# https://github.com/googlesamples/android-DownloadableFonts/blob/master/app/src/main/res/values/family_names.xml
#
# See https://developers.google.com/fonts/docs/developer_api for more info on the Google Fonts API
#
# Usage:     fontlist.py <API_KEY> > family_names.xml

import sys, urllib2, json

if len(sys.argv) != 2:
    print "Usage:"
    print "  fontlist.py <API_KEY> > family_names.xml"
    print "No Google Fonts API key?  Get one at https://developers.google.com/fonts/docs/developer_api#APIKey"
    sys.exit(0)

APIKEY=sys.argv[1]
url="https://www.googleapis.com/webfonts/v1/webfonts?key="

opener = urllib2.build_opener()
try:
    request = urllib2.Request(url + APIKEY)
    conn = opener.open(request)
except Exception, e:
    print "Whoopsie.  Got a " + str(e.code) + " " + str(e.reason) + " error.  You sure that API is legit?"
    sys.exit(1)
data = json.loads(conn.read())

count = 0
items = data["items"]

print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
print "<!-- Collected from " + url+APIKEY + " -->"
print """<resources>
    <string-array name="family_names">"""
for key in items:
    if "latin" in key["subsets"]:
        print " "*10 + "<item>" + key["family"] + "</item>"
        count = count + 1
print """    <!--Total:  """ + str(count) + """-->
    </array>
</resources>"""
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

该脚本输出一个有趣的family_names.xml 。如果您将其与google 提供的字体进行比较,它会遮盖问题中列出的大部分字体。但它并没有获得所有这些字体,包括“Zilla”、“Ubuntu”、“Barcode”和“Encode”字体。也许这些字体也有一些共同点,可以用来进一步过滤列表?

有趣的是,生成的列表还包括 github 列表中没有的新字体,包括:

  • 沃尔科恩 SC
  • 光谱
  • 光谱SC
  • 塞奇威克大道
  • 塞奇威克大道展示

....“Barlow”、“Bellefair”等等。其中一些字体似乎确实适用于 Android。

所以我猜测该演示文件中的列表只是旧的。也许存在许可问题或技术问题,因此有必要更换列表。

不管怎样,可能值得提交一个包含更新且更新的列表的拉取请求,该列表删除不再提供的字体,并添加 API 确实提供的、经过测试且已知可与提供商合作的字体。