загружаемые шрифты - не удается загрузить некоторые шрифты google
Я играю сзагружаемыми шрифтами api . Я скачалпример приложения Google и также включил код в свой проект. Оба работают успешно, но некоторые шрифты постоянно не удается загрузить как из моего приложения, так и из примера приложения.
Я использую FontsContractCompat.requestFont и получаю обратный вызов к onTypefaceRequestFailed(int reason) с причиной 1. В документации говорится, что это означает "FAIL_REASON_FONT_NOT_FOUND". 
Я предполагаю, что эти шрифты должны существовать, потому что: 1) они появляются в xml-файле, который поставляется с пример приложения, 2) они появляются в онлайн-списке шрифтов Google, и 3) они возвращаются из веб-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 
1 ответ:
Это определенно странно. Я заметил, что многие (но не все) из этих шрифтов не имеют подмножества "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 , что интересно. Если вы сравниваете его с , предоставленным google, он затеняет большинство шрифтов, перечисленных в вопросе. Но он не получает все из них, включая шрифты "Zilla", "Ubuntu", "Barcode" и "Encode". Может быть, есть что-то общее между этими шрифтами, что можно использовать для дальнейшей фильтрации списка?
Интересно, что сгенерированный список также включает новые шрифты, отсутствующие в списке github, в том числе:
- VolKorn SC
- спектральный
- спектральный SC
- Седжвик-Авеню
- Sedgewick Ave Display
...."Барлоу", "Bellefair" и еще куча других. И некоторые из этих шрифтов действительно работают с Android.
Так что я предполагаю, что список в этом демо-файле просто старый. Возможно, были проблемы с лицензированием или технические проблемы, которые заставили его переключиться на другой список.Независимо от этого, возможно, стоит отправить запрос на вытягивание с более новым и более современным списком, который удаляет больше не предоставляемый шрифты и добавления в тех, которые предлагает API, которые протестированы и известны для работы с поставщиком.