Use custom font from res / font using WebView in Android

I want to change the face html string font loaded in the WebView, just as mentioned in this question:

How to change the font of Webview on Android?

The difference is that I do not use the old approach when you store font files in the resource folder, but I store them in res / font, as described in the font support documentation "Fonts in XML":

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

Now I obviously can not use:

file:///android_asset/fonts/my_font.otf

I tried:

file:///android_res/font/my_font.otf

and many other ways to describe the path to my font inside the res / font folder, but none of them work.

How to use my own font family for WebView, which loads the html string if my font is stored in the res / font folder?

// Change:

, :

@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);
}
+4
1

, , 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>

HTML- webview Webview#loadDataWithBaseURL(String, String, String, String, String), file://android_res/ url ( )

:

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

Source: https://habr.com/ru/post/1686132/


All Articles