android webView中未加载资源字体

 萧士瑋62184 发布于 2022-12-31 10:35

我正在开发一个将HTML文件加载到webview中的android活动.
然而,这种活动并不是在某些手机中加载字体,例如HTC Desire或Sony Xperia Z的4.4或4.1机器人.
我想知道我是否遗漏了某些东西,或者仅仅取决于我正在测试我的应用程序的手机.

private void loadToWebView(String s) {
    try {
        pageWebView.loadDataWithBaseURL("file:///android_asset/", s,
                "text/html", "utf-8", null);
        configureWebView(pageWebView);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这是html标题:






字体位于assets/fonts /中
在此输入图像描述

1 个回答
  • 首先,字体路径应该与您的HTML/CSS文件相关.

    所以,而不是这个:

    @font-face { font-family: 'Persian'; src: url('file:///android_asset/fonts/b_yekan.ttf'); }
    

    使用这样的东西:

    @font-face { font-family: 'Persian'; src: url('fonts/b_yekan.ttf'); }
    

    其次,您必须确保您要测试的目标实际上支持阿拉伯语脚本.

    有了这个,下面我提供一个工作的例子.


    assets/about_us.html:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <style type="text/css">
        @font-face { font-family: 'B Homa'; src: url('fonts/BHOMA.TTF');}
        @font-face { font-family: 'B Lotus'; src: url('fonts/BLOTUS.TTF');}
        @font-face { font-family: 'B Lotus Bold'; src: url('fonts/BLOTUSBD.TTF');}
    </style>
    </head>
    <body>
        <p B Homa';font-size:20px;">B Homa: ????</p>
        <p B Lotus';font-size:20px;">B Lotus: ????</p>
        <p B Lotus Bold';font-size:20px;">B Lotus Bold: ????</p>
    </body>
    </html>
    

    BHOMA.TTF,BLOTUS.TTFBLOTUSBD.TTF从bornaray.com下载并存储在assets/fonts/文件夹中.

    loadToWebView(),它是a的一部分Fragment,因此getActivity().getAssets():

    private void loadToWebView() {
        AssetManager assetManager = getActivity().getAssets();
        try {
            InputStream input = assetManager.open("about_us.html");
            byte[] buffer = new byte[input.available()];
            input.read(buffer);
            input.close();
            mWebView.loadDataWithBaseURL("file:///android_asset/",
                    new String(buffer), "text/html", "UTF-8", null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    结果如下:

    截图

    希望这可以帮助.

    2022-12-31 10:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有