一般情况下我们做加载网页都是返回一个url,我们进行加载。各种各样的样式都已经在网页中做了处理。但是,也会碰到一些情况,需要我们加载代码片段。还有修改一些样式,比如:修改网页中的字体。当然,本文中的修改字体同样可以修改网页中的字体。

那么现在就将这个问题做一下记录。文章的末尾也会附上承香墨影有关app修改字体的系列文章。

添加字体

新建Assets及fonts目录,并将字体文件拷贝到fonts目录下

字体.png

老生常谈的问题,加载代码片段

mWebView.loadDataWithBaseURL("file:///android_asset/",html, "text/html", "utf-8", null);

这一块没有什么可说的。

重要的点是在WebViewClient中做的处理

wvMian.setWebViewClient(new WebViewClient() {

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

view.loadUrl("javascript:!function(){" + "s=document.createElement('style');s.innerHTML=" + "\"@font-face{font-family:myhyqh;src:url('**injection**/hyqh.ttf');}*{font-family:myhyqh !important;}\";"

+ "document.getElementsByTagName('head')[0].appendChild(s);" +

"document.getElementsByTagName('body')[0].style.fontFamily = \"myhyqh\";}()");

}

//由于网页上是没有权限访问本地的asset文件夹的,因此我们需要拦截请求来加载本地的文件,如果是代码片段可以直接用asset文件夹,我这里替换了`file:

//android_assets/`为 `**injection**/`了,我们还需要重写`shouldInterceptRequest`

//在请求为我们这个字体文件的时候,加载本地文件:

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

WebResourceResponse response = super.shouldInterceptRequest(view, url);

if (url != null && url.contains("**injection**/")) {

//String assertPath = url.replace("**injection**/", "");

String assertPath = url.substring(url.indexOf("**injection**/") + "**injection**/".length(), url.length());

try {

response = new WebResourceResponse("application/x-font-ttf", "UTF8", getAssets().open(assertPath));

} catch (IOException e) {

e.printStackTrace();

}

}

return response;

}

});

如果都是代码片段形式的话可以用以下的方式

mWebView.setWebViewClient(new WebViewClient() {

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

view.loadUrl("javascript:!function(){" +

"s=document.createElement('style');s.innerHTML="

+ "\"@font-face{font-family:MyCustomFont;src:url('****/myfont.ttf');}*"

+"{font-family:MyCustomFont !important;}\";"

+ "document.getElementsByTagName('head')[0].appendChild(s);" +

"document.getElementsByTagName('body')[0].style.fontFamily = \"MyCustomFont\";}()");

}

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

WebResourceResponse response = super.shouldInterceptRequest(view, url);

Log.i("webview","load intercept request:" + url);

if (url != null && url.contains("myfont.ttf")) {

String assertPath ="fonts/myfont.ttf";

// String assertPath = url.substring(url.indexOf("**injection**/") + "**injection**/".length(), url.length());

try {

response = new WebResourceResponse("application/x-font-ttf","UTF8", getAssets().open(assertPath));

} catch (IOException e) {

e.printStackTrace();

}

}

return response;

}

});

以上就可以实现了更改网页中的字体了。

膜拜一下大神!!!

html5字体修改webview,WebView中修改字体相关推荐

  1. 微软 Outlook 如何修改邮件列表中的字体或字号

    因为电脑的操作系统是默认英文的,默认的字体实在是太难看了. 解决方案 我们是可以对字体进行修改的. 例如修改成下面的方案. 选择视图 首先,先选定顶部的视图. 然后在当前的视图下,选择视图设置. 随后 ...

  2. win10修改系统字体(替换OneNote中Calibri字体)

    微软的OneNote还是很好用的,但是字体问题一直是一个吐槽点. 我自己就去微软官网吐槽了好几次,然而并没有什么用.我说设置默认字体为consolas完全无法生效,再次输入笔记时,中文自动改为微软雅黑 ...

  3. 修改jupyter notebook中的字体

    windows系统默认的jupyter 中字体不太舒适,而平时习惯了pycharm中自定义字体的舒适感.所以我折腾了一下将notebook中的字体换掉. 找到python安装的路径, Lib\site ...

  4. android开发字体样式,Android开发中修改程序字体的样式

    Android提供三种字体:"Sans","serif"和"monospace". 1.在Android XML文件中设置字体 可以采用an ...

  5. unity 发光字体_Unity3D 设置OnGUI中的字体样式、字体颜色、字体大小等

    1:字体样式 从系统盘,如C:\Windows\Fonts找一个.ttf格式的字体库,放到Assets目录下. 此时选中该字体库,在Inspector面板可以修改字体的大小,试了一下修改字体的颜色(F ...

  6. linux路由修改密码,Linux中修改Mysql root用户密码的方法

    Linux中修改Mysql root用户密码的方法 下面给大家分享下在Linux下如何修改Mysql的用户(root)的密码,分两种情况:第一种当拥有原来的mysql的root密码,第二种情况忘记原来 ...

  7. html页面icon字体无法显示,bootstrap中icon字体图标怎么不显示?

    bootstrap中icon字体图标怎么不显示?下面本篇文章给大家介绍一下Bootstrap字体图标不显示问题.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 问题: bootstr ...

  8. 微信小程序可以加服务器上的字体,微信小程序中自定义字体

    微信小程序支持自定义字体开放出来也有段时间,这边整理下使用自定义字体中,容易忽略的一些问题,和简便的全局自定义方式.如果是同时加载两种字体包,先下载下来的会被后下载下来的字体包给覆盖. 官网接口文档 ...

  9. css引入本地字体文件,关于css中引入字体文件

    关于css中引入字体文件 css样式代码: @font-face { font-family: Lovelo-Black;//定义font的名字 src: url(font/Lovelo Black. ...

  10. matlab显示字体颜色,在Matlab中显示字体颜色

    我正在尝试创建一个数字(转换为字符串)的数组,并在阈值下降的下方,对于我当前使用0.5的测试.我需要我的桌子上的每个值的字体都落在我的门槛上,以红色显示,在我目前的代码中,我只使用2列,但我将使用10 ...

最新文章

  1. 2022-2028年中国手机支付市场投资分析及前景预测报告
  2. Java基础——深入理解ReentrantLock
  3. 在 Tomcat 中设置 JDBCRealm
  4. Web前端性能优化,应该怎么做?
  5. 彻底搞懂阻塞、非阻塞、同步、异步
  6. python gmm em算法 2维数据_AI大语音(六)——混合高斯模型(GMM)(深度解析)...
  7. 《Java程序员职场全攻略:从小工到专家》连载十:这条路大家都是怎么走的
  8. 软件测试第五周 - 编码的 UI 测试
  9. pdfptable pdf生成表格分页_Excel按一下这个键,一张纸打印所有表格,不要浪费A4纸了...
  10. 转换大师swf转html,iPixSoft SWF to HTML5 Converter
  11. Linux基础:systemctl和journalctl常用命令
  12. VRay无限平面的应用教程
  13. python之whl文件解释与安装
  14. 产品必备技能(十):如何绘制原型图?先要绘制页面流程图+页面原型图!附实操原型图、流程图实例(抖音)
  15. 教你如何挑选趁手的笔记本电脑!
  16. Vue.js 踩坑记 (一)
  17. python如何编写爬虫程序_python编写网络爬虫程序
  18. OpenStack 基础知识(学神教育学习笔记)
  19. 今晚直播 |现实环境中的强化学习如何解决?你不可错过的RL终极奥义
  20. LeetCode 24.两两交换链表中的节点 C语言

热门文章

  1. Microsoft Access教程_编程入门自学教程_菜鸟教程-免费教程分享
  2. JS 定时器setInterval clearInterval 延时器setTimeOut 异步 动画
  3. H.266/VVC SCC技术学习:帧内块拷贝(Intra block copy, IBC)
  4. 2022跨境出海:东南亚电商市场现状及发展前景
  5. Notepad++拼写检查
  6. 在jupytor中运行随机森林预测泰坦尼克旅客生存情况
  7. 腾讯云网站备案咨询:网站命名基本要求
  8. JVM之对象内存详解
  9. 百度集团副总裁吴甜发布文心大模型最新升级,AI应用步入新阶段
  10. 程序员的生活就是这么朴实无华,且没钱。