загружаемые шрифты - не удается загрузить некоторые шрифты 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 2

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, которые протестированы и известны для работы с поставщиком.