之前的项目中,在做webview的时候,遇到后台返回的数据是 html 标签的样子,并不是我们 通常用的 接口直接返回 的是 html 页面的形式。这种情况不多,但是像 网易新闻 的详情页都是直接返回的 html 标签代码。并不是 我们熟悉的 html 页面。所以今天就来总结一下,也算是混合开发中的一个知识点。
很多人都知道,我们正常的加载网页的方法:loadurl()能加载本地的html 页面也能加载 服务器上的页面。真的就这两种吗?no no no·····
后台给我们的接口地址,可能是我们的网页地址,也有可能是 html的json 语言字符串。例如:
<div id="tempInfo" style="height: 675px; width: 300px; background-color: rgb(157, 216, 235); margin: 0px auto;"><div id="myclock_1496215854531" class="myclock ui-draggable ui-draggable-handle" style="z-index: 11; left: -71px; top: 0px; position: absolute; transform: scale(0.6, 0.6);"><div class="display" style="z-index: 10"><div class="weekdays"><span>周一</span><span>周二</span><span class="active">周三</span><span>周四</span><span>周五</span><span>周六</span><span>周日</span></div><div class="ampm">下午</div><div class="digits"><div class="zero"><span class="d1"></span><span class="d2"></span><span class="d3"></span><span class="d4"></span><span class="d5"></span><span class="d6"></span><span class="d7"></span></div>
返回这样的json 数据的html body里面的内容。今天主要讲这种webview 怎么加载。
首先分析一下数据:这个后台返回的json数据 是html 内容,但是 没有
<html>
<head></head>
<body></body>
</html> 这些标签,也没有 css 和 js等
但是webview 给我们提供了这个方法:
webView.loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl);
WebView webView = new WebView(this); StringBuilder htmlString = new StringBuilder(); htmlString.append("<html>"); htmlString.append("<head>"); htmlString.append("<title>欢迎你</title>"); //这里也可以 拼接 <link> 标签 导入我们的 css 文件 htmlString.append("</head>"); htmlString.append("<body>"); //这里拼接 你后台返回的 json 数据 htmlString.append("</body>"); htmlString.append("</html>"); //使用简单的loadData方法会导致乱码 //show.loadData(sb.toString(), "text/html", "utf-8"); webView.loadDataWithBaseURL(null,htmlString.toString(), "text/html", "utf-8", null);
这样我们就引入了,我们的html。就能看到界面了。但是这样就结束了,我们的界面肯定很丑。。。。
所以我们还要引入 .css 文件和.js文件。这些要我们自己写在Android的文件里面,
创建一个 file 文件 在编辑 名字的时候 要添加上 后缀名 比如:xxx.js 和 xxx.css 等。我们的js 和 css 都在这里面写。
这些写好之后我们在拼接 html 的地方 也拼接进去,css 就用 <link>标签,js就用 <script>标签,拼接到对应得位置。
但是这里要注意的是: 在拼接的时候,我们的 双引号 " xxx" 都要 转译 成 \" xxx\ " 才行。
注意:双引号要转译用\,每一个 双引号都要转译:例如:\"utf-8\",然后再增加对应的类名(转译)