①首先需要我们获得目标网页的HTML源码:

URL url = new URL(address);
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection conn = (HttpURLConnection) urlConnection;
        conn.setRequestMethod("GET");
        InputStream inStream = conn.getInputStream();
        byte[] data = readInputStream(inStream);
        String htmlSource = new String(data, "UTF-8");
//将输入流转换为字节数组的方法
public byte[] readInputStream(InputStream instream) throws IOException {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1204];
        int len;
        while ((len = instream.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        instream.close();
        return outStream.toByteArray();

②这里我将需要的字体文件放在了项目Assets/Fonts/xxxx.ttf目录下,然后在Assets目录下新建两个文件myfont.css和body.css
myfont.css

@font-face {
    font-family: 'MyWebFont';
    src:url('fonts/xxxx1.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
@font-face {
    font-family: 'MyWebFont';
    src:url('fonts/xxxx2.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;

这里需要注意的问题:如果有两个或者两个以上的字体文件,在上面的css中可以依次写入即可,一个@font-face{}标签里边写一个字体。另外font-family后边的名字可以相同,也可以不同!
boby.css

body {
    font-family:'MyWebFont';

我这里是让网页中<body />里边使用这些字体文件,当然你也可以做你自己的处理!另外需要注意的问题,在myfont.css中如果`font-family写了相同的名字,则写一个名字即可,但是如果写了不同的名字,则要写上全部的名字,中间用逗号隔开!
③接下来,就要对网页进行处理,加入我们的css!

String assetsFontCSS = "<link href=\"file:///android_asset/myfont.css\" rel=\"stylesheet\" type=\"text/css\"/>";
String assetsbodyCSS = "<link href=\"file:///android_asset/body.css\" rel=\"stylesheet\" type=\"text/css\"/>";
String htmlAdded = htmlSource.replace("</head>", assetsFontCSS + "\n" + assetsbodyCSS + "\n" + "</head>");

将两个css,引入到HTML源码的<head />标签中!
④最后调用loadDataWithBaseUrl()方法即可!

webView.loadDataWithBaseURL(address, htmlAdded , "text/html","utf-8", null);

因为把字体文件直接打包在APK中,会大大增加APK文件的大小,如果我们想实时在服务器中下载字体,然后再去渲染页面呢,就需要我们将字体文件下载到手机的SD卡中!
这里下载到手机中的目录为SD卡根目录/downloadFont/Fonts/xxx.ttf,对应创建的css文件SD卡根目录/downloadFont/myfont.css
这里字体的下载和文件的创建就不说了,这里说下如何引用。

String SDLinkpath = "file://"+ Environment.getExternalStorageDirectory().getAbsolutePath()+"/downloadFont";
String SDFontCSS = "<link href=\"" 
+ SDLinkpath
+ "/myfont.css\" rel=\"stylesheet\" type=\"text/css\"/>";

同样的加入到网页源码中<head />标签中即可!

①在测试中发现,这样引用对字体文件的大小有限制,特别是中文的字体文件,一般都特别大,大概在30M以下可以正常显示,超过30M就不能正常显示了!
High-Logic公司的FontCreator软件是一款功能强大的字体编辑软件!当时使用这个软件将字体文件删除到一定的大小,测试可以正常显示!
如果需要请购买正版,下载仅供测试使用传送门
②此方法试用于android 4.4及以上版本,即API level 19及以上!以下版本不能显示!
查阅了资料,说WebView内核在4.4以下是webkit,4.4之后是chromium,而chromium是Google和Oprea从webkit分支独立出来的blink渲染引擎!不知道跟这个有没有关系!

这里推荐一位大神人物,对Webkit和Chrominm有很深的研究:
Yongsheng大神

相关参考文章:

开发者应当了解的WebKit知识
Android WebView页面加载优化
Webkit 改善字体加载
Webkit对接Woff字体
Android 拦截WebView加载URL,控制其加载CSS、JS资源

前言有时,当我们使用Webview加载一个网页的时候,需要使用特定的字体来显示,这时就需要我们对页面做下处理!方法①首先需要我们获得目标网页的HTML源码:URL url = new URL(address); URLConnection urlConnection = url.openConnection(); HttpURLConnection conn = (H function resizeFont() { //获取屏幕宽度 let clientWidth = document.documentElement.clientWidth || document.body.clientWidth; //设计图参考宽度 let design = 750; if (client document.styleSheets[0].cssRules[0].style.fontSize="44px"; styleSheets为本网页加载的所有样式表的集合 以百度为例,打开百度任意一个搜索网页,在控制台输入 console.log(document.styleSheets) StyleSheetList(10) [ StyleSheet , StyleS...
从assets中获取文件      file:///android_asset/page1.jpg 从drawable中获取图片  file:///android_res/drawable/page1.jpg 从font中获取字体           file:///android_res/font/font.otf 其他类型举一反三吧 以下内容没有验证: Using the re...
手机系统本身预置了不少字体,当然包括android原生的 4种。 android 原生控件设置字体可以用代码设置setTypeface ,或者xml 内设置font family 。 这里就需要主要到这两者的区别 差个前提知识,android实际是linux ① Android 系统的字体文件:位于 /system/fonts/ 文件夹下,我们可以到对应的目录下进行查看,可以看出,Android...
ui.run(() => { 字体 = android.graphics.Typeface.createFromFile("/sdcard/脚本/模块/MiSans-Thin.ttf"); ui.输入框.setTypeface(字体) String htmlString = "<html><body><h1>Hello World!</h1></body></html>"; Spanned spanned = Html.fromHtml(htmlString); TextView textView = findViewById(R.id.text_view); textView.setText(spanned);