首页 > 解决方案 > 在 Android WebView 中使用应用程序文件目录中的 TTF 字体

问题描述

我需要实现可以离线渲染 HTML 的 WebView。HTML 中可能会使用多种字体,我将它们全部下载到应用程序的文件目录中,使用context.getFilesDir().

我的目标:将这些字体文件“输入”到 WebView 中,以使呈现的 HTML 看起来正确。

到目前为止我尝试了什么。

通过以下方式将 HTML 绑定到 WebView:

baseUrl = "file:///data/user/0/com.myapp/files/fonts"; // this is for convenience, I don't hardcode like this in code
webView.loadDataWithBaseURL(baseUrl, html, "text/html; charset=utf-8", "UTF-8", null);

指定的文件夹包含所有下载的字体。

而且我还@font-face像这样向 HTML 的标题添加配置:

<html>
 <head> 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
  <style id="fonts">@font-face { font-family: Guttman Stam; src: url(/Guttman Stam.ttf); }</style>
 </head> 
 <body>
  <p><span style="background-color:#FFFFFF;font-family:Guttman Stam;font-size:26pt;">text</span></p> 
 </body>
</html>

我确保该文件/data/user/0/com.myapp/files/fonts/Guttman Stam.ttf存在。

不幸的是,它不起作用。我还尝试在@font-face使用WebViewnull""WebView时提供完整的配置路径baseUrl,但没有运气。

所以,我有点迷路了。帮助将不胜感激。

标签: androidhtmlcssandroid-webviewfont-face

解决方案


我用了很长一段时间,不确定这是否适用于您的情况,仅供参考

 String finalDataToLoad = "<link rel=\"stylesheet\" type=\"text/css\" href=\"file:///android_asset/font_helvetica.css\"  />" + YOUR_HTML;

 webView.loadDataWithBaseURL("file://" + outPutFolder, finalDataToLoad, "text/html", "utf-8", null);

outPutFolder 是我有图像的地方

我在资产文件夹中有字体


推荐阅读