android - Android webView 中未加载 Assets 字体

标签 android css fonts webview

我正在开发一个将 HTML 文件加载到 Web View 中的 Android Activity 。
但是,此 Activity 并未在某些手机中加载字体,例如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 标题:

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

字体像这样位于assets/fonts/中
enter image description here

最佳答案

  • 首先,字体路径应与您的 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 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>

BHOMA.TTFBLOTUS.TTFBLOTUSBD.TTFbornaray.com 下载。并存储在 assets/fonts/ 文件夹中。

loadToWebView(),它是 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();
    }
}

结果:

Screenshot

希望这对您有所帮助。

关于android - Android webView 中未加载 Assets 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077094/

相关文章:

java - 没有接口(interface)方法setExtras

fonts - 如何使用 Fontforge 脚本将 .otf 转换为 .ttf(带有 Postscript 大纲)?

c# - 使用 Graphics.DrawString 时动态调整字体大小以适应空间

Android 列表小部件和项目点击不起作用

android - 在 Android Studio 中使用 .so 文件

html - CSS:如何覆盖属性?

javascript - 如何使阵列中的随机图像响应?

javascript - 带箭头的 slider 导航(HTML、CSS、JAVASCRIPT)

fonts - 使用带有 Theme-UI 的本地自定义字体

android - 获取电池待机时间,Android 中的 2G/3G 使用情况