android-可下载的字体-无法下载某些Google字体

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

我使用FontsContractCompat.requestFont并使用原因1回调了onTypefaceRequestFailed(int原因).文档说这意味着“ FAIL_REASON_FONT_NOT_FOUND”.
我认为这些字体应该存在是因为:1)它们出现在示例应用程序随附的xml文件中; 2)它们出现在online list of Google Fonts中; 3)它们从开发者网络API(https://www.googleapis)返回. com / webfonts / v1 / webfonts?key =)

这是失败字体的列表:
 吴哥
 Archivo
 尽快浓缩
 Baloo Bhaijaan
 Baloo Tammudu
 马德望
 巴永
 贝尔费尔
 BioRhyme扩展
 博克
 冷凝舱
 洲菲洛蒙一号
 晨拉
 内容
 丹格雷克
 编码Sans
 编码Sans压缩
 编码Sans展开
 编码Sans Semi Condensed
 编码Sans Semi展开
 快手
 福斯蒂纳
 写意
 哈努曼
 高棉语
 库伦
 *条形码128
 *条形码128文本
 *条形码39
 Libre Barcode 39扩展
 Libre Barcode 39扩展文本
 *条形码39文字
 真田
 手册
 金属
 ul
 穆尔帕利
 木塔
 Mukta Mahee
 Mukta Malar
 Nokora
 打开Sans压缩
 前言
 浓缩的Roboto
 赛拉
 塞拉浓缩
 赛拉特级浓缩
 赛拉半浓缩
 塞奇威克大街
 塞奇威克大道展示
 暹粒市
 w
 塔普罗姆
 Ubuntu压缩
 Zilla平板
 Zilla平板亮点

解决方法:

绝对很奇怪.我观察到,其中许多(但不是全部)字体没有“ 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)

该脚本输出一个有趣的family_names.xml.如果将其与one provided by google进行比较,它将使问题中列出的大多数字体变黑.但是并不能全部使用,包括“ Zilla”,“ Ubuntu”,“ Barcode”和“ Encode”字体.也许这些字体也有一些共同点,可以用来进一步过滤列表?

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

> VolKorn SC
>光谱
>光谱SC
>塞奇威克大街
> Sedgewick Ave显示屏

….“ Barlow”,“ Bellefair”等.而且其中某些字体似乎确实可以在Android上使用.

所以我猜该演示文件中的列表很旧.可能是由于许可问题或技术问题,因此有必要切换列表.

无论如何,都应该提交一个具有更新的更新列表的拉取请求,以删除不再提供的字体,并添加经过API测试并已知可与提供程序一起使用的字体.

上一篇:字体在Android Studio预览中更改,但在模拟器/设备中未更改


下一篇:android-错误的高棉Unicode字符串