一、如何在string.xml中定义html文档

首先最好自己在外部新建一个html文件,然后开始写自己的内容。并且在浏览器中预览效果。
首先预先编写一个简单的html文档:

<html><head><style type="text/css">body {color: #111;}p {font-size: 1.5em;}</style></head><body><h1>这是标题1</h1><p>这是一个链接</p><a href="https://www.bing.com.cn">打开bing</a></body>
</html>

然后在string.xml中添加节点:

    <string name="html_content"><Data><![CDATA[
<html><head><style type="text/css">body {color: #111;}p {font-size: 1.5em;}</style></head><body><h1>这是标题1</h1><p>这是一个链接</p><a href="https://www.bing.com.cn">打开bing</a></body>
</html>]]></Data></string>

主要的就是在string节点中要包含Data,然后使用CDATA包裹起来。这样在使用getResource().getString()后获取的字符串,仍然是仅包含html文本而不包含Data和CDATA标签的,你可以在下一步中打印查看。因此我们从文件中直接读取html也是可以的,而不必一定将其放在strings.xml中。

二、使用WebView将其显示出来

新建一个Activity,仅包含一个WebView。

<?xml version="1.0" encoding="utf-8"?>
<layoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"tools:context=".HtmlActivity"
><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/web_view"></WebView>
</layout>

在Activity中加载html。

class HtmlActivity : AppCompatActivity() {private lateinit var mBinding: ActivityHtmlBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mBinding = DataBindingUtil.setContentView(this, R.layout.activity_html)LoadHtmlTask().execute()}//使用AsyncTask读取HTML并加载,当然也可以直接放在主线程中,不过考虑到一般html都比较大,或者可能//会从文件中读取,比较耗时。//设置为inner,与java中的普通内部类等价,如果不加inner,在kotlin中默认等价为java中的静态内部类,是无法访问//外部类的方法和属性的。private inner class LoadHtmlTask: AsyncTask<Void, Void, String>{constructor(){}override fun doInBackground(vararg params: Void?): String {var s: String = resources.getString(R.string.html_content)return s}override fun onPostExecute(result: String?) {super.onPostExecute(result)if(result != null){mBinding.webView.settingsmBinding.webView.setBackgroundColor(Color.TRANSPARENT)mBinding.webView.isHorizontalScrollBarEnabled = falsemBinding.webView.loadData(result, "text/html; charset=UTF-8", null)}}}
}

效果:

可以看到基本按照我们所写的格式。点击链接的话,会提示打开浏览器,打开bing网页。

三、拦截WebView中的链接点击事件

需要为WebView设置一个WebViewClient。

override fun onPostExecute(result: String?) {super.onPostExecute(result)if(result != null){mBinding.webView.settingsmBinding.webView.setBackgroundColor(Color.TRANSPARENT)mBinding.webView.isHorizontalScrollBarEnabled = falsemBinding.webView.loadData(result, "text/html; charset=UTF-8", null)//此处为Kotlin的匿名内部类的写法mBinding.webView.webViewClient = object: WebViewClient(){override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {if (request?.url.toString().contains("bing.com.cn")){openMailClient()return true}return super.shouldOverrideUrlLoading(view, request)}}}}

然后编写openMainClient方法

private fun openMailClient() {var uri = Uri.parse("https://www.baidu.com")var intent = Intent(Intent.ACTION_VIEW, uri)startActivity(intent)}

当点击链接后,虽然链接是bing的网址,但由于我们的拦截处理,变成了百度的网页。

Android在string.xml中定义html文档并加载显示,以及拦截WebView链接事件相关推荐

  1. iOS 开发之 pdf 文档的加载与浏览的 4 种方式

    原文链接:http://www.jianshu.com/p/1d4305a02ea5 在我们的开发中,有些像电子书类型的 app 的开发会涉及到 pdf 文档的加载与展示.由于笔者项目中正好涉及到这块 ...

  2. android 字符串 %d,android的string.xml中的%s、%1$s、%d、%1$d的使用

    String.xml 主目录:Android学习大纲 背景:在我们app开发的过程中我们有时候会遇到,一个TextView里面会遇到会有一个一大串固定的文字,而里面的数字或者个别字需要根据后台的接口而 ...

  3. MFC单文档程序加载web网站和html文件

    使用CHtmlView类,CHtmlView类的主要功能是访问Web网站和HTML文档:该类可说是对webbrowser控件的封装: 新建一个单文档项目:选择 CHtmlView 类作为视类的基类:项 ...

  4. 【Android 逆向】类加载器 ClassLoader ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )

    文章目录 一.类加载时机 1.隐式加载 2.显式加载 二.类加载步骤 一.类加载时机 1.隐式加载 类加载 的 隐式加载 , 没有明确的说明加载某个类 , 但是进行了如下操作 : 使用 new 关键字 ...

  5. 【android】string.xml中的一些错误

    1.遇到如下错误的时候说明你需要在单引号签名加转义字符(\): Description Resource Path Location Type error: Apostrophe not preced ...

  6. Word控件Spire.Doc 【文本】教程(12) ;新方法在 C# 中获取 Word 文档中内容控件的别名、标签和 ID

    内容控件为您提供了一种设计文档的方法.当您向文档添加内容控件时,该控件由边框.标题和临时文本标识,这些文本可以向用户提供说明,并且可以防止用户编辑或删除文档的受保护部分. 将文档或模板的部分内容绑定到 ...

  7. 怎样在计算机上插入机构图,Win7系统如何在excel中添加word文档结构图?

    今天小编给大家分享 Ghost Win7系统 在excel中添加word文档结构图的方法,有时候在编辑excel表格时,为了数据能够更加直观展示,会在excel中添加word文档结构图,这样显示的内容 ...

  8. openoffice转换过程中遇到繁体字文档转换失败的问题

    今天发现上线的文档转换功能中存在一个文档转换不成功,查看后台日志标志文档无法加载成功,提示日志如下: INFO: connected Jul 08, 2015 2:50:33 PM com.artof ...

  9. 如何在文档中插入excel文档

    如何在文档中插入excel文档 1.打开word文档,将光标放在需要插入的位置 2.菜单栏-插入->对象->由文件创建->浏览->选择excel文档 3.勾选显示为图标,链接可 ...

最新文章

  1. LVS的工作原理和相关算法
  2. vim和NERD树扩展 - 添加文件
  3. 我能成为项目经理么?
  4. 【论文学习】ICLR2021,鲁棒早期学习法:抑制记忆噪声标签ROBUST EARLY-LEARNING: HINDERING THE MEMORIZATION OF NOISY LABELS
  5. 关于linux挂载windows共享文件夹的试验
  6. 百度域名出现问题 2010-1-12号的杯具
  7. 点击input框,添加阴影效果
  8. C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中
  9. 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝
  10. 华为手机怎么设置应用不全屏显示_手机投屏智能电视画面比例不合适怎么办?...
  11. QuillBot:又一个值得拥有的论文润色工具
  12. LINUX系列:Shell命令
  13. 信号与系统【奥本海目】第二版笔记
  14. 社会化媒体驱动营销转型
  15. 易语言excel内容查找助手
  16. python乌龟赛跑_Python之龟兔赛跑
  17. 机动车驾驶证考场叫号和车牌识别
  18. 计算机管理如何格式化u盘,详细教您如何格式化u盘
  19. 美食app的UI设计
  20. 自学php多久可以工作_php自学要多久,学php难吗,多久能学会?

热门文章

  1. 对一个正整数n,求出n!中末尾0的个数。
  2. iOS11 获取手机已安装应用列表
  3. Idea java 程序打jar包(maven)
  4. 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告
  5. 【SSH网上商城项目实战11】查询和删除商品功能的实现
  6. GDKOI 2016
  7. 1071-数字的空洞
  8. 异常处理记录: Servlet class X is not a javax.servlet.Servlet
  9. 【报告分享】2021年BrandGrow中国新锐品牌增长潜力报告.pdf(附下载链接)
  10. 谷歌开源Embedding可视化工具