webView加载assert中的html

前几天项目中遇到了加载 很长文本的界面  在历经了 拼接字串, 拆分成多个Textview显示的痛苦后  采用了 HTML的方式来展示  但是还是有几点要注意  此博客就是来记录这次经历的.




这个是从微软的隐私声明截取的部分  我们要做的网页就是这样的.


首先创建项目 简单的设置加载的webview

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWebview = findViewById(R.id.webview);
    configWebViewSetting();

    loadHTMLContent();

}

/**
 * 配置webview
 * webview 存在漏洞  因为不需要js交互,文件加载,路径加载  所以设为false  避免被攻击.
 * */
private void configWebViewSetting() {
    WebSettings settings = mWebview.getSettings();

    settings.setJavaScriptEnabled(false);

    settings.setAllowFileAccess(false);

    settings.setAllowFileAccessFromFileURLs(false);
    //设置一下背景  防止和原布局中的背景色不协调
    mWebview.setBackgroundColor(0);
}

然后创建html文件 


<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">

    <style type="text/css">
         body{
            margin:0;
         }
         p{
            margin:0;
         }
         a{
            text-decoration:none;
         }
         a:link {
            color:#cbf9e8;

           }
        a:visited {
            color:#5471bd;
            text-decoration:none;
        }

</style>
</head>
<body>
<p><strong>我们收集的个人数据</strong></p>
<p>Microsoft 收集数据以便高效运营,以及为你提供最佳的产品体验。 你直接提供部分此类数据,例如当你创建 Microsoft 帐户、管理组织的许可帐户、向必应提交搜索查询、注册 Microsoft 活动、向 Cortana 发出语音命令、向 OneDrive 上载文件、购买 MSDN 订阅、注册 Office 365 或联系我们获得支持时。 我们通过记录你如何与我们的产品交互而获得部分数据,例如,采用 Cookie 等技术,以及从你设备上运行的软件接收错误报告或使用数据。 我们还从第三方获取数据。</p>
<p><strong>我们如何使用个人数据</strong></p>
<p>Microsoft 通过我们收集的数据来运营业务并向你提供我们的产品,产品内容包括使用数据改进我们的产品并个性化你的体验。 我们也可能使用数据来与你通信,例如通知你有关你的帐户、安全性更新和产品信息。 我们也使用数据帮助显示更多相关的广告,无论是在广告所支持的我们自己的产品(如 MSN 和必应)中还是在第三方提供的产品中。 但是,我们不会使用你在电子邮件、聊天、视频通话或语音邮件中所说的内容或你的文档、照片或其他个人文件来针对你投放广告。</p>
<p><strong>我们共享个人数据的原因</strong></p>
<p>我们在征得你同意后,或以完成某些交易/提供你请求或授权的产品为必要前提,共享你的个人数据。 以下情况下,我们也会向 Microsoft 控股的分公司和子公司;代表我们的供应商共享或披露信息:法律要求时或为了响应法律程序时;保护我们的客户;保护生命;维护我们产品的安全;保护 Microsoft 的权利和财产。</p>
<p><strong>如何访问和控制你的个人数据</strong></p>
<p>你可以针对许多 Microsoft 产品在线查看、编辑或删除你的个人数据。 你也可以针对 Microsoft 对你数据的收集和使用进行选择。 你访问或控制你个人数据的方式将取决于你使用的产品。</p>
<p>你始终可以选择是否接收来自 Microsoft 的促销电子邮件、短信、电话和信件。 你还可以通过访问我们的 选择<a href="http://go.microsoft.com/fwlink/?LinkID=286759" target="_blank" >退出页面</a> 选择不再从 Microsoft 接收基于兴趣的广告。</p>
<p><strong>Cookie 和类似技术</strong></p>
<p>Microsoft 使用 Cookie(下载到你设备中的小型文本文件)和类似的技术来提供我们的网站和联机服务,并协助收集数据。 Cookie 可让我们可以存储你的偏好和设置以及其他一些功能;使你能够登录;提供基于兴趣的广告;打击欺诈行为;分析我们的网站和联机服务的性能。 Microsoft 应用使用其他标识符,如本声明“Windows”部分中所描述的 Windows 内的广告 ID,以实现类似目的。</p>
<p>我们也使用 Web 信号帮助提供 Cookie 和收集用法和性能数据。 我们的网站可能包含来自第三方服务提供商的 Web 信号和 Cookie</p>
<p>你有各种可以控制 CookieWeb 信号和类似技术的工具,包括用于阻止和删除 Cookie 的浏览器控件和来自某些第三方分析服务提供商的控件,以通过 Web 信号和类似技术退出数据收集。 你的浏览器和其他选择可能影响你对我们产品的体验。</p>

</body>
</html>

其中 margin 是因为 html中 本身还有margin 8px 会影响我们在手机布局中的边距  所以我们要把他设置为0,这样我们在webview中设置边距尺寸不会有影响.

然后就是超链接的一些设置,去下划线  设置字体颜色  


再然后 就是这个方法了  

loadHTMLContent()
 

我们通常使用的是 

private void loadHTMLContent() {
    mWebview.loadUrl("file:///android_asset/License/privacy.html");
}

这样直接使用路径加载  固然方便   但是会存在安全隐患.项目中不允许存在类似的绝对路径 因此不能使用这样的方法


这样我们改用下面的方法

private String getHTMLContent() {
    String content = "";
    try {
        AssetManager am = getAssets();
        InputStream in = am.open("License/privacy.html");
        content = IOUtils.toString(in,"UTF-8");
    } catch (Exception e) {
        Log.i(TAG, e.toString());
    }
    return content;
}
    其中的IOUtils 使用的是 
org.apache.commons.io.IOUtils;

这样在手机上就能加载出来


因为手机是全面屏  因此截图里会显示出 四个黑角.


github 地址

https://github.com/HierarchyC/WebViewLoadHtml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值