当前位置: 首页 > 知识库问答 >
问题:

在Android的WebView中使用res/font中的自定义字体

曹浩淼
2023-03-14

我想更改加载到WebView中的html字符串的字体,类似于本问题中提到的:

如何在Android中更改Webview的字体?

不同之处在于,我并没有使用旧的方法将字体文件存储在assets文件夹中,而是将它们存储在res/font中,如“Fonts in XML”android字体支持文档中所述:

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html

现在,我显然不能使用:

<代码>file:///android_asset/fonts/my_font.otf

我尝试了:

<代码>file:///android_res/font/my_font.otf

还有许多其他的方法来描述res/font文件夹中我的字体的路径,但它们都不起作用。

如果我的字体存储在res/font文件夹中,如何为加载html字符串的Web视图使用自定义字体系列?

//编辑:

我当前无法正常工作的实现是:

@BindingAdapter("loadData")
public static void loadData(WebView webView, String htmlData) {
    webView.loadDataWithBaseURL(null, htmlData, "text/html", "utf-8", null);
}

@BindingAdapter({"loadData", "fontFamily"})
public static void loadData(WebView webView, String htmlData, @FontRes int fontFamilyId) {
    TypedValue value = new TypedValue();
    ApplicationActivity.getSharedApplication().getResources().getValue(fontFamilyId, value, true);
    String fontPath = value.string.toString();
    File fontFile = new File(fontPath);

    String prefix = "<html>\n"
            +"\t<head>\n"
            +"\t\t<style type=\"text/css\">\n"
            +"\t\t\t@font-face {\n"
            +"\t\t\t\tfont-family: 'CustomFont';\n"
            +"\t\t\t\tsrc: url(\"file:///android_res/font/"+fontFile.getName()+"\")\n"
            +"\t\t\t}\n"
            +"\t\t\tbody {\n"
            +"\t\t\t\tfont-family: 'CustomFont';\n"
            +"\t\t\t}\n"
            +"\t\t</style>\n"
            +"\t</head>\n"
            +"\t<body>\n";
    String postfix = "\t</body>\n</html>";

    loadData(webView, prefix + htmlData + postfix);
}

共有3个答案

邢飞雨
2023-03-14

您可以像这样使用自定义res字体-

<head>
<style type="text/css">
    @font-face {
        font-family: MyFont;
        src: url("file:///res/font/myfont.ttf")
    }
    body {
        font-family: MyFont;
    }
</style>
弓晔
2023-03-14

我设法从res/font目录加载我的本地字体。在我的示例中,我想加载斜体字opensans。

我的设置如下:

  1. css文件在目录中
  2. 使用此选项设置字体
css prettyprint-override">    @font-face {
      font-family: 'opensans';
      src: url("file:///android_res/font/opensans_italic.ttf")
    }

    body {
      font-family: 'opensans';
      font-weight: 400;
    }

使用loadDataWithBaseUrl加载WebView,例如:

webView。loadDataWithBaseURL(null,您的HTMLcontent,“text/html”,“utf-8”,null)

但我在我的html内容顶部有这个:"

我希望它也适用于你的情况。

编辑:

将其添加到proguard配置中,使其在发布模式下工作。

<代码>-保持类com。你的包裹名称R$font{*;}

昌和悦
2023-03-14

刚刚尝试过,其工作原理与从资源加载字体类似,只需更改基本url以指向资源即可。

HTML示例

<html>
<head>
    <style>
        @font-face {
            font-family: 'CustomFont';
            src: url('font/CustomFont.ttf');
        }
        #font {
            font-family: 'CustomFont';
        }
    </style>
</head>
<body>
    <p>No Font</p>
    <br />
    <p id="font">Font</p>
</body>

使用Webview#loadDataSusBaseURL(String, String, String, String, String)将此超文本标记语言加载到webview中,使用file://android_res/作为基本url(第一个参数)

例子:

webview.loadDataWithBaseURL("file:///android_res/", html, "text/html", "utf-8", null)

编辑:

如果您在发布版本中使用proGuard,您需要添加额外的规则来防止R类在ProGuard过程中被重命名,否则WebView将无法找到字体资源。详细信息可以在这篇文章中找到

 类似资料:
  • 当我将资产/字体中的自定义字体应用于本地html时。我只是像下面这样设置字体@font-face{font-Family:'my'字体;src: url('file:///android_asset/fonts/my'字体);}但是,当我使用loadUrl(“远程html url”)时,上面的代码不起作用。有一个好主意吗? 下面的链接显示本地字体和本地html的示例代码。如何在Android中更改

  • 我在整个React本机应用程序中使用自定义字体。我使用react-native-link命令链接了它们。除了Android的Webview组件之外,它们在任何地方都可以工作。它在iOS Webview中正常工作。 我已经尝试使用url("file:///android_assets/fonts/Lohit-Gujarati")在webview css中创建一个字体面。它不起作用。导入谷歌字体css

  • 是否可以在我的Android应用程序中包含TTF字体(Arial),以便外部加载网页的CSS使用? 比如说我的网站http://www.some-site.com它有一个CSS文件,包含以下内容: 我还尝试将字体的url src设置为以下值,但它们都不起作用: 我知道如果Arial是这样的话,这是可行的。ttf文件与服务器上的CSS文件位于同一目录中,但我想做的是能够使用Arial。ttf,位于我

  • @font-face跟其在CSS中作用表现一样,在后面简单地添加个块状属性即可,类似下面: @font-face font-family Geo font-style normal src url(fonts/geo_sans_light/GensansLight.ttf) .ingeo font-family Geo 生成为: @font-face { font-famil

  • 问题内容: 我的应用程序正在使用JSoup下载留言板页面的HTML(在这种情况下,它是包含给定线程帖子的页面)。我想使用此HTML,去除不需要的项目,并应用自定义CSS对其进行样式设置使其在WebView中“可移动”。 我应该在处理样式时将样式注入HTML中(因为无论如何还是要处理样式),还是有一种很好的方法将CSS文件添加到我的应用程序资产中并简单地引用它。我认为后者将是理想的,但不确定如何实现

  • 问题内容: 我正在尝试在使用wkhtmltopdf生成的PDF中使用自定义字体。我读到您不能使用google webfonts,而wkhtmltopdf使用truetype .ttf文件。谁能确认?因此,我从Google webfont下载了一个.ttf文件,并将其放入服务器中,然后使用了字体: 和字体系列: 现在应该以Jolly Lodger字体呈现的文本根本没有出现,页面为空白。 我究竟做错了