android webView中未加载资产字体

android webView中未加载资产字体,android,css,fonts,webview,Android,Css,Fonts,Webview,我正在开发一个android活动,将HTML文件加载到webview中但是,该活动不会在某些手机上加载字体,例如HTC Desire或带有4.4或4.1 androids的Sony Xperia Z我想知道我是否错过了什么,或者这只取决于我正在测试我的应用程序的手机 private void loadToWebView(String s) { try { pageWebView.loadDataWithBaseURL("file:///android_asset/", s

我正在开发一个android活动,将HTML文件加载到webview中
但是,该活动不会在某些手机上加载字体,例如HTC Desire或带有4.4或4.1 androids的Sony Xperia Z
我想知道我是否错过了什么,或者这只取决于我正在测试我的应用程序的手机

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标题:

<!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: 'Persian'; src: url('file:///android_asset/fonts/b_yekan.ttf'); }
@font-face { font-family: 'Persian2'; src: url('file:///android_asset/fonts/b_homa.ttf'); }
@font-face { font-family: 'PersianTitle'; src: url('file:///android_asset/fonts/b_titr.ttf');}
body {font-family: 'Persian';}
h1 {font-family: 'PersianTitle';}
h2 {font-family: 'Persian2';}
</style>

@字体面{font-family:'波斯语';src:url('file:///android_asset/fonts/b_yekan.ttf'); }
@字体面{font-family:'Persian2';src:url('file:///android_asset/fonts/b_homa.ttf'); }
@字体面{font-family:'persiantile';src:url('file:///android_asset/fonts/b_titr.ttf');}
正文{字体系列:'波斯语';}
h1{font系列:'persiantile';}
h2{字体系列:'Persian2';}
字体位于资产/字体/中,如下所示

  • 首先,字体路径应该与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'); }
  • 其次,您必须确保测试目标实际支持阿拉伯语脚本
因此,下面我将提供一个工作示例


资产/关于_us.html:

结果是:


希望这有帮助。

它对其他设备有效吗?我现在没有其他设备要测试!我将在emulator上进行测试,并让您know@MehulJoisar它也不在工作emulator@VSB,您尝试过我发布的解决方案吗?@shoerat是的,不幸的是,它没有帮助。我对此发表了评论,但我不知道它现在在哪里?你是如何得到这个结果的?你用的是模拟器还是真设备?@KhalidElSayed real device,Nexus⒌@ozbek如何确保我测试的目标实际支持阿拉伯语脚本?tnx.@naruzumaki:Android从那时起就支持阿拉伯语。您可以检查目标SDK是否大于等于17,并假设支持阿拉伯语。@ozbek-请在最初的2行代码中添加右括号“}”。StackOverflow不允许我发布少于6个字符的编辑!
<!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 style="font-family:'B Homa';font-size:20px;">B Homa: مخصص</p>
    <p style="font-family:'B Lotus';font-size:20px;">B Lotus: مخصص</p>
    <p style="font-family:'B Lotus Bold';font-size:20px;">B Lotus Bold: مخصص</p>
</body>
</html>
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();
    }
}