You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为使用可下载字体(Downloadable Fonts)的WebView设置FontFamily?

解决可下载字体(Downloadable Fonts)在CSS中设置 fontFamily 的问题

我懂你现在的麻烦——把应用切换成用Android可下载字体之后,本地压根没有字体资源文件了,之前那种在CSS里通过src: url('assets/xxx.ttf')指定字体路径的常规方案完全失效,确实挺头疼的。这里给你几个针对性的解决办法:

方案1:直接使用系统注册的字体家族名称

当你通过Android的可下载字体机制成功加载字体后,这个字体会被注册为系统可用的字体,你不需要在CSS里指定src路径,直接用它的字体家族名称就能调用。

举个实际例子:假设你在Android项目中配置的可下载字体家族名称是"Roboto Flex",那你的CSS可以这么写:

.target-text {
  font-family: "Roboto Flex", sans-serif;
}

要是不确定字体的准确家族名称,可以在Android代码里通过Typeface对象获取:

// 假设你通过资源ID加载可下载字体
val typeface = ResourcesCompat.getFont(context, R.font.roboto_flex)
val fontFamilyName = typeface?.familyName // 这里拿到的就是CSS要用到的名称

方案2:给WebView注入已加载的字体(WebView场景适用)

如果你的CSS是在WebView中使用,还可以通过Android代码把已加载的可下载字体直接注入到WebView的配置里:

val webView = findViewById<WebView>(R.id.your_webview_id)
val typeface = ResourcesCompat.getFont(this, R.font.roboto_flex)
// 设置WebView默认使用该字体
webView.settings.fontFamily = typeface?.familyName

这样WebView里的所有页面都会默认用上这个字体,你也依然可以在CSS里指定这个家族名称来针对性设置。

方案3:Web端直接引用对应字体(字体来自Google Fonts时适用)

要是你的可下载字体是来自Google Fonts,还可以在HTML的<head>里直接引入Web端的字体链接,这样CSS就能正常识别使用了:

<link href="https://fonts.googleapis.com/css2?family=Roboto+Flex&display=swap" rel="stylesheet">

之后CSS里同样用font-family: "Roboto Flex", sans-serif;就行。这种方式和Android端的可下载字体互不冲突,还能保证Web内容和原生内容的字体一致性。

最后要确认的是:你已经在Android项目中正确配置了可下载字体(比如通过Android Studio的字体选择器添加,或者在res/font目录下的font.xml里定义),只有字体成功加载并注册到系统,上面的方案才能生效。

内容的提问来源于stack exchange,提问作者android_eng

火山引擎 最新活动