我正在玩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测试并已知可与提供程序一起使用的字体.