如何在Android布局中多个MathJax公式视图

如何在Android布局中多个MathJax公式视图,第1张

概述我正在开发一个 Android应用程序.我想在Layout中多个公式显示.但它并没有显示我的所有公式. 我想查看: 但它只查看一个WebView显示公式: 我的xml代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi 我正在开发一个 Android应用程序.我想在Layout中多个公式显示.但它并没有显示我的所有公式.

我想查看:

但它只查看一个WebVIEw显示公式:

我的xml代码:

<?xml version="1.0" enCoding="utf-8"?>  <relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:layout_wIDth="fill_parent"   androID:layout_height="fill_parent"   androID:orIEntation="vertical" ><linearLayout    androID:ID="@+ID/topLayout"    androID:layout_wIDth="match_parent"    androID:layout_height="wrap_content"    androID:layout_alignParentleft="true"    androID:layout_alignParenttop="true"    androID:background="#ffd0e3e5"    androID:g@R_403_6610@ty="center"    androID:paddingBottom="6dp"    androID:paddingtop="5dp" >    <TextVIEw        androID:ID="@+ID/textTitle"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="TextVIEw"        androID:textcolor="#ff33203d"        androID:textSize="18sp" /></linearLayout><WebVIEw    androID:ID="@+ID/txtQuestion"    androID:layout_wIDth="match_parent"    androID:layout_height="180dp"    androID:layout_alignParentleft="true"    androID:layout_below="@+ID/topLayout"    androID:layout_weight="1" /><ScrollVIEw    androID:ID="@+ID/scrollVIEw1"    androID:layout_wIDth="match_parent"    androID:layout_height="wrap_content"    androID:layout_below="@+ID/txtQuestion"    androID:layout_margintop="10dp"    androID:layout_weight="0" >    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:orIEntation="vertical" >        <linearLayout            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:orIEntation="horizontal" >            <Radiobutton                androID:layout_wIDth="wrap_content"                androID:layout_height="match_parent" />            <WebVIEw                androID:ID="@+ID/WebVIEw04"                androID:layout_wIDth="fill_parent"                androID:layout_height="170dp"                androID:layout_weight="1" />        </linearLayout>        <linearLayout            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:orIEntation="horizontal" >            <Radiobutton                androID:layout_wIDth="wrap_content"                androID:layout_height="match_parent" />            <WebVIEw                androID:ID="@+ID/WebVIEw01"                androID:layout_wIDth="fill_parent"                androID:layout_height="165dp"                androID:layout_margintop="2dp"                androID:layout_weight="1" />        </linearLayout>        <linearLayout            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:orIEntation="horizontal" >            <Radiobutton                androID:layout_wIDth="wrap_content"                androID:layout_height="match_parent" />            <WebVIEw                androID:ID="@+ID/WebVIEw02"                androID:layout_wIDth="fill_parent"                androID:layout_height="80dp"                androID:layout_margintop="2dp"                androID:layout_weight="1" />        </linearLayout>        <linearLayout            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:orIEntation="horizontal" >            <Radiobutton                androID:layout_wIDth="wrap_content"                androID:layout_height="match_parent" />            <WebVIEw                androID:ID="@+ID/WebVIEw03"                androID:layout_wIDth="fill_parent"                androID:layout_height="80dp"                androID:layout_margintop="2dp"                androID:layout_weight="1" />        </linearLayout>    </linearLayout>  </ScrollVIEw></relativeLayout>

我的Java代码:

public class MainActivity extends Activity implements VIEw.OnClickListener{ private WebVIEw    webVIEwEquationdisplay,webvIEw,WebVIEw04,WebVIEw01,WebVIEw02,WebVIEw03; private String mathML; private int exampleIndex = 0;private String doubleEscapeTeX(String s) {    String t="";    for (int i=0; i < s.length(); i++) {        if (s.charat(i) == '\'') t += '\';        if (s.charat(i) != '\n') t += s.charat(i);        if (s.charat(i) == '\') t += "\";    }    return t;}private String getExample(int index) {    return getResources().getStringArray(R.array.mml_examples)[index];}private final String MLxml="<math xmlns=\"http://www.w3.org/1998/Math/MathML\">"+"<mstyle displaystyle=\"true\">"+"<mrow>  <munderover>    <mo>&#8747;</mo>    <mn>-1</mn>    <mn>+1</mn>" +"  </munderover>  <mfrac>    <mrow>      <mi>d</mi>      <mi>x</mi>    </mrow>" +"    <mi>x</mi>  </mfrac></mrow></mstyle></math> Text ......";/** Called when the activity is first created. */@OverrIDepublic voID onCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    webvIEw = (WebVIEw) findVIEwByID(R.ID.txtQuestion);    webvIEw.getSettings().setJavaScriptEnabled(true);    webvIEw.getSettings().setBuiltInZoomControls(true);    initiateWebVIEw(MLxml,webvIEw);    WebVIEw04 = (WebVIEw) findVIEwByID(R.ID.WebVIEw04);    WebVIEw04.getSettings().setJavaScriptEnabled(true);    WebVIEw04.getSettings().setBuiltInZoomControls(true);    initiateWebVIEw(MLxml,WebVIEw04);    WebVIEw01 = (WebVIEw) findVIEwByID(R.ID.WebVIEw01);    WebVIEw01.getSettings().setJavaScriptEnabled(true);    WebVIEw01.getSettings().setBuiltInZoomControls(true);    initiateWebVIEw(MLxml,WebVIEw01);    WebVIEw02 = (WebVIEw) findVIEwByID(R.ID.WebVIEw02);    WebVIEw02.getSettings().setJavaScriptEnabled(true);    WebVIEw02.getSettings().setBuiltInZoomControls(true);    initiateWebVIEw(MLxml,WebVIEw02);    WebVIEw03 = (WebVIEw) findVIEwByID(R.ID.WebVIEw03);    WebVIEw03.getSettings().setJavaScriptEnabled(true);    WebVIEw03.getSettings().setBuiltInZoomControls(true);    initiateWebVIEw(MLxml,WebVIEw03);}private voID initiateWebVIEw( String formulaML,WebVIEw formulaWebvIEw){            mathML=formulaML;    webVIEwEquationdisplay=formulaWebvIEw;   webVIEwEquationdisplay.setWebVIEwClIEnt(new WebVIEwClIEnt() {        @OverrIDe        public voID onPageFinished(WebVIEw vIEw,String url) {            super.onPageFinished(vIEw,url);            webVIEwEquationdisplay.loadUrl("JavaScript:document.getElementByID('math').INNERHTML='" +doubleEscapeTeX(mathML)+"';");      webVIEwEquationdisplay.loadUrl("JavaScript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);");        }    });    final String mathJaxOfflineUrl = "file:///androID_asset/MathJax/MathJax.Js";              webVIEwEquationdisplay.loadDataWithBaseURL("http://bar/","<script type='text/x-mathjax-config'>"            +"MathJax.Hub.Config({ "                 +"showMathMenu: false,"                +"jax: ['input/MathML','output/HTML-CSS']," // output/SVG                         +"extensions: ['mml2jax.Js'],"                           +"TeX: { extensions: ['noErrors.Js','noUndefined.Js'] },"               // +"jax: ['input/AsciiMath',"              //  +"extensions: ['asciimath2jax.Js'],"               //  +"AsciiMath: { fixphi: true,useMathMLspacing: true,displaystyle: false,decimalsign: \".\" },"              +"});</script>"            +"<script type='text/JavaScript' "              +"src='"+mathJaxOfflineUrl+"'"              +"></script><span ID='math'></span>","text/HTML","utf-8","");  }}    }

我流了这个enter link description here的例子.
请帮我!

解决方法 问题是由使用initiateWebVIEw()中的字段webVIEwEquationdisplay引起的:该方法是从onCreate()连续调用四个WebVIEw的.他们每个人都有自己的WebVIEwClIEnt,到目前为止一切都很好.

但是由于WebVIEwClIEnt.onPageFinished()中的语句引用了webVIEwEquationdisplay,并且因为只有在onCreate()完成后才会在主线程上执行此方法(四次),因此最后分配给webVIEwEquationdisplay的WebVIEw将是将始终调用loadUrl()的一个.

解决问题的一种方法是使用方法参数而不是字段.这对于onPageFinished()尤为重要.

private voID initiateWebVIEw(String formulaML,WebVIEw formulaWebvIEw){    formulaWebvIEw.setWebVIEwClIEnt(new WebVIEwClIEnt() {        @OverrIDe        public voID onPageFinished(WebVIEw vIEw,url);            vIEw.loadUrl("JavaScript:document.getElementByID('math').INNERHTML='" +doubleEscapeTeX(formulaML)+"';");            vIEw.loadUrl("JavaScript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);");        }    });    final String mathJaxOfflineUrl = "file:///androID_asset/MathJax/MathJax.Js";    formulaWebvIEw.loadDataWithBaseURL("http://bar/","<script type='text/x-mathjax-config'>"            +"MathJax.Hub.Config({ "            +"showMathMenu: false,"            +"jax: ['input/MathML'," // output/SVG            +"extensions: ['mml2jax.Js'],"            +"TeX: { extensions: ['noErrors.Js',"            // +"jax: ['input/AsciiMath',"            //  +"extensions: ['asciimath2jax.Js'],"            //  +"AsciiMath: { fixphi: true,"            +"});</script>"            +"<script type='text/JavaScript' "            +"src='"+mathJaxOfflineUrl+"'"            +"></script><span ID='math'></span>","");}
总结

以上是内存溢出为你收集整理的如何在Android布局中多个MathJax公式视图全部内容,希望文章能够帮你解决如何在Android布局中多个MathJax公式视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1125444.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存