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

2024-02-22

我正在玩可下载字体 api https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html。我下载了谷歌示例应用程序 https://github.com/googlesamples/android-DownloadableFonts并将代码合并到我的项目中。两者都运行成功,但某些字体始终无法从我的应用程序和示例应用程序下载。

I use FontsContractCompat.requestFont并得到回调onTypefaceRequestFailed(int reason)有原因1。文档说这意味着“FAIL_REASON_FONT_NOT_FOUND”。 我认为这些字体应该存在,因为:1)它们出现在示例应用程序附带的 xml 文件中,2)它们出现在Google 字体在线列表 https://fonts.google.com/和 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


这绝对很奇怪。我观察到许多(但不是全部)这些字体没有“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 https://gist.github.com/fat-tire/fb5a4e3617c4738e73af9318ed6720d5这很有趣。如果你把它与谷歌提供的一个 https://github.com/googlesamples/android-DownloadableFonts/blob/master/app/src/main/res/values/family_names.xml,它确实会屏蔽问题中列出的大部分字体。但它并没有获得所有这些字体,包括“Zilla”、“Ubuntu”、“Barcode”和“Encode”字体。也许这些字体也有一些共同点,可以用来进一步过滤列表?

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

  • 福尔光SC
  • Spectral
  • 光谱SC
  • 塞奇威克大道
  • 塞奇威克大道展示

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可下载字体 - 无法下载某些谷歌字体 的相关文章

  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • ImageView 中的全尺寸图像

    我正在尝试在 ImageView 中绘制图像 但我希望它不缩放 并根据需要使用滚动条 我怎样才能做到这一点 现在我只有一个可绘制集作为 XML 中 ImageView 的 android src 这会自动缩放图像以适应屏幕宽度 我读到这可能
  • doInBackground 运行时是否可以停止 asynctask?

    我正在 ActivityB Oncreate 中创建异步任务 在该任务中 我正在运行无限 while 循环doInBackground 当我转到上一个活动并再次回到该活动时 创建了另一个异步任务 我的问题现在是两个无限 while 循环正在
  • 启动 Twitter 应用程序 [重复]

    这个问题在这里已经有答案了 可能的重复 Twitter 应用程序的 Android Intent https stackoverflow com questions 2077008 android intent for twitter ap
  • android 谷歌+登录定制

    我正在创建一个 Android 应用程序 现在我正在实现社交网络登录 Facebook 按钮很好 但 google 按钮的语言与 Facebook 不同 另外 它只说 登录 我想让它说 用谷歌登录 我是 android 编程的新手 看到我需
  • 如何编辑 gradle 依赖项

    我正在开发一个 android 项目 该项目在我的 gradle 文件中使用以下依赖项 compile com mapzen on the road 1 1 1 我想编辑其中一个文件 以添加一些缺少的功能并为该项目做出贡献 如何下载该项目并
  • 更改 AChartEngine 中的图例大小

    我想专门更改饼图的图例大小输出 我已经尝试了所有可以找到的 AChartEngine 方法 但没有一个只能更改图例文本大小 我必须重写 onDraw 函数吗 如果是这样 怎么办 要设置图例高度 请使用 renderer setLegendH
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 版本 5 上带有 getBackground().setAlpha 的按钮 - 棒棒糖无法正常工作

    我有这段代码 适用于自 API 14 以来的每个版本 但在 Android 5 0 Lollipop 上无法正常工作 以下是我希望按钮出现的方式 单击按钮1 buttonArrivals getBackground setAlpha 180
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 无法在 Android 模拟器中安装 apk

    我正在尝试通过 adb shell 在 ICS 模拟器中安装 apk 从一个站点下载 但出现以下错误 失败 INSTALL FAILED UID CHANGED 可能是什么问题 只需 rm r 有问题的数据目录即可 如果您在安装时遇到此错误
  • 带有空白白屏的 WebView

    我在 DialogFragment 中有一个 webview 它使用以下方式显示文档和 PDF它可以进行几次尝试 但如果用户尝试频繁打开和关闭对话框 webview 将显示空白屏幕 我已经尝试了所有的线程link1 https stacko
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • OpenGL ES 2.0 屏幕闪烁

    我面临着一个大问题 我正在使用带有 Android 4 0 3 的 Transformer tf101 选项卡 我的应用程序使用自定义 OpenGL ES 2 0 表面 我正在用纹理渲染多个平面 该纹理大约发生变化 每秒 20 次 并通过传
  • gradle-experimental:0.1.0 buildConfigField

    谁知道怎么定义buildConfigField在实验性的 gradle 插件中 android productFlavors create demo applicationId com anthonymandra rawdroid buil
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p

随机推荐

  • 如何向 Gnuplot 直方图(平滑频率)添加数据标签?

    我的文件第 6 列中有蛋白质分子量数据 有问题的列如下所示 MW kDa 16 8214045562515 101 41770820613989 24 332255496943485 43 946599899844436 210 58276
  • 以编程方式获取 Artisan 命令列表

    当您使用 Laravel PHP 框架时 有没有一种方法 在运行时 以编程方式获取当前配置和可用的列表artisan命令 我基本上是在寻找了解的方法 所有命令名称 类或与该类对应的对象 像往常一样 当我清楚地问自己这个问题时 自助服务台就会
  • 无法使用带有功能组件的引用从父函数调用子函数

    最近我正在研究 React 并从父级调用子函数 但是当我在引用上调用 current 时 它给了我未定义的信息 实际上 refs 非常适合以前的父组件 甚至可以调用useImperativeHandle功能也一样 但是使用时useImper
  • 不使用“function”关键字定义匿名函数

    我可以定义和使用匿名函数并像这样调用它 x lt 1 3 sapply x function x x 有时我觉得使用function这样就太啰嗦了 还有其他方法来定义匿名函数吗 In the purrr package https purr
  • 关于 Pytorch 中的奇数图像尺寸

    因此 我目前正在构建一个 2 通道 也称为双通道 卷积神经网络 用于测量 2 个 二进制 图像之间的相似度 我遇到的问题如下 我的输入图像为 40 x 50 经过 1 个卷积层和 1 个池化层 例如 后 输出大小为 18 x 23 那么如何
  • 迭代Python多维关联数组中的一个键

    我正在动态创建一个二维关联数组 字典 我试图循环遍历它的键 同时保持其中一个索引不变 因此例如与第一个括号中带有 john 的 key 关联的所有值 myhash john smith address 1 myhash john doe a
  • 处理 iPad Mini 屏幕尺寸

    新款iPad Mini的屏幕尺寸为7 9英寸 它有视网膜显示屏吗 它会自动扩展现有的 xib 和 Storyboard 还是我们必须为每个版本创建两个版本 我们是否会像处理 iPhone 5 一样处理它 如何创建定义或条件来查看设备是否正在
  • 如何将 ASCII char 转换为其 ASCII int 值?

    我想将 char 转换为它的ASCII http en wikipedia org wiki ASCIIint 值 我可以用所有可能的值填充一个数组并与其进行比较 但这对我来说似乎不正确 我想要类似的东西 char mychar k pub
  • Ruby 独立脚本中的 RoR 环境

    我想运行一个独立的 ruby 脚本 在其中需要使用我的 RoR 环境 具体来说 我需要我的模型扩展 ActionMailer 和 ActiveRecord 我还需要从我的database yml 中读取数据库配置 我该怎么办 最简单的方法是
  • C++ std regex问号问题

    我在使用 std 正则表达式时遇到了麻烦 我无法使问号量词起作用 对 regex match 的调用将始终返回 0 我还尝试了 0 1 它的行为也不像我预期的那样 它的行为就像 量词 这是我的代码 include
  • 如何将表格水平和垂直放置在div的中心

    我们可以将图像设置为背景图像 div like div div 我需要在房间的中央放一张桌子 div 水平和垂直 有没有使用跨浏览器 div div
  • 混合身份验证失败! Facebook 返回无效的用户 ID

    我正在使用 Hybridauth 库在我的网站中创建一个带有 facebook 链接的注册 我在本地主机中创建并测试了代码 一切都运行良好 但是当将所有内容移动到服务器时 它不起作用并给了我这个错误Authentication failed
  • ENOENT 错误 - 安装 aws-cdk 节点模块

    运行命令后 sudo npm i g aws cdk 给出错误 npm ERR Linux 4 4 0 151 generic npm ERR argv usr bin nodejs usr bin npm i g aws cdk npm
  • 方法 [] 被调用为 null

    我是颤振新手 我在 YouTube 和 Google 上看到了很多教程 但找不到解决方案 我该如何解决这个错误 import package flutter material dart import dart ui import dart
  • 在 C# 中使用 Delphi 的结构数组和字符串

    我一直在尝试通过以下方式调用在 Delphi 中创建的方法 function Func1 arrParams array of TParams Integer stdcall type TParams record Type int Nam
  • 如何在 php 中将 stdin 处理为 stdout?

    我正在尝试编写一个简单的 php 脚本来获取数据stdin 处理它 然后将其写入stdout 我知道 PHP 可能不是处理此类事情的最佳语言 但有我需要的现有功能 我试过了 但它不起作用 我这样调用它 echo e ndata n php
  • Rails:Selenium::WebDriver::Error::WebDriverError:不可执行:'chromedriver-helper'

    我两天前设置了 Rails 环境 我以为一切进展顺利 但是当我运行时rake test由于此加载错误 命令已中止 Bundler GemRequireError There was an error while trying to load
  • 使用浏览器获取客户端计算机中目录中所有文件的列表

    虽然这里的用例并不那么重要 但实际上的用途很重要 我想通过浏览器浏览用户本地文件系统 就像我们通过
  • Outlook Web 添加 - 更改标题栏的颜色

    我正在尝试更改插件中标题栏的颜色 我在 xml 文件中看到它在标题栏上生成标题 挂接到标题栏的正确方法是什么 我看到 C 有类似的问题有什么方法可以更改 VSTO Outlook 添加中的边框 标题背景吗 https stackoverfl
  • 可下载字体 - 无法下载某些谷歌字体

    我正在玩可下载字体 api https developer android com guide topics ui look and feel downloadable fonts html 我下载了谷歌示例应用程序 https githu