安卓利用WebView显示TeX及网页数据

1.什么是TeX

WIKI地址

TEX被普遍认为是一个优秀的排版工具,特别是在处理复杂的数学公式时。
利用诸如是LATEX等终端软件,TEX就能够排版出精美的文本以帮助人们辨认和查找。

通俗的说,Tex就是一个可以利用文本显示复杂的符号的一个文本格式语言,和解析工具.
他能让我们方便的让我们在网页上显示各种公式及特殊符号.
复制代码

例子:

2.如何解析TeX

Katex是一个快速易于使用的TeX javaScript 数学符号渲染脚本.
这里我们使用Katex来进行数学公式的渲染
复制代码

3.如何把服务器传过来的数据利用本地的html模版进行渲染

由于服务器传过来的是json数据,数据量不能太大,所以我们需要把整个网页关于解析部分放到安卓本地.然后由服务器传递过来数据的实际内容部分.
复制代码

html模版

index.html
<html>
<head>
    <link rel="stylesheet" href="katex.min.css"/>
    <script defer src="katex.min.js"></script>
    <script defer src="auto-render.min.js" integrity="sha384-yACMu8JWxKzSp/C1YV86pzGiQ/l1YUfE8oPuahJQxzehAjEt2GiQuy/BIvl9KyeF" ></script>
    <script>
        function addBody(a){
            document.getElementById("aaa").innerHTML=a;
            render();
        }

        function render(){
            renderMathInElement(document.body);
        }

    </script>
</head>

<body id="aaa">
</body>
</html>
复制代码

其他文件也放到assets目录下

目录如下图:

其中fonts和css,还有js文件请从如下地址中获得

<!DOCTYPE html>
<!-- KaTeX requires the use of the HTML5 doctype. Without it, KaTeX may not render properly -->
<html>
  <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.css" integrity="sha384-D+9gmBxUQogRLqvARvNLmA9hS2x//eK1FhVb9PiU86gmcrBrJAQT8okdJ4LMp2uv" crossorigin="anonymous">

    <!-- The loading of KaTeX is deferred to speed up page rendering -->
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.js" integrity="sha384-483A6DwYfKeDa0Q52fJmxFXkcPCFfnXMoXblOkJ4JcA8zATN6Tm78UNL72AKk+0O" crossorigin="anonymous"></script>

    <!-- To automatically render math in text elements, include the auto-render extension: -->
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/contrib/auto-render.min.js" integrity="sha384-yACMu8JWxKzSp/C1YV86pzGiQ/l1YUfE8oPuahJQxzehAjEt2GiQuy/BIvl9KyeF" crossorigin="anonymous"
        onload="renderMathInElement(document.body);"></script>
  </head>
  ...
</html>
复制代码

fonts文件也请自己从css文件中获取地址.

安卓端操作

package com.example.daquexian.flexiblerichtextview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private WebView v;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        v = (WebView) findViewById(R.id.webView);
        button = (Button)findViewById(R.id.b) ;
        v.getSettings().setJavaScriptEnabled(true);
        // 设置允许JS弹窗
        v.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        v.loadUrl("file:///android_asset/index.html");
        final String s = "1123<br /><span class=\\\"math-tex\\\">\\\\(x = {-b \\\\pm \\\\sqrt{b^2-4ac} \\\\over 2a}\\\\)</span><div></div><div></div><table border=\\\"1\\\" cellpadding=\\\"1\\\" cellspacing=\\\"1\\\" style=\\\"width:500px;\\\">\n" +
                "<tbody><tr><td>asd</td><td>asd</td></tr><tr><td>asd</td><td>asd</td></tr><tr><td>asd</td><td>asd</td></tr>\n" +
                "</tbody>\n" +
                "</table><br /><img alt=\\\"\\\" src=\\\"https://img1.zhiupimg-d.cn/group1/M00/10/44/CpsxFFuN9NSAG_94AACrQJtXzYg069.jpg\\\" style=\\\"width: 450px; height: 484px;\\\" /><br />hehehe";
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                v.loadUrl("javascript:addBody('"+s+"')");
            }
        });
    }
}
复制代码

main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--<com.daquexian.flexiblerichtextview.FlexibleRichTextView-->
            <!--android:id="@+id/frtv"-->
            <!--android:visibility="gone"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="wrap_content"/>-->
        <Button
            android:id="@+id/b"
            android:text="ddddddd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</RelativeLayout>

复制代码

运行安卓程序,然后点击button按钮,则webview中就能正常显示数据中的tex数据了,顺道也能正常解析服务器的html标签.

显示效果:

转载于:https://juejin.im/post/5b8f37dc6fb9a019bd2484bd

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值