Display math equations in Android application is a tricky functionality. In this android example we will cover load math latex equations using two different js files JQMath and MathJax
Let's get started
Step 1: Create android application
Step 2: Create simple layout with Webview
We all know that webview will use to load HTML text or any webpages. so here we will load JavaScript files inside webview then we will append our math equations to the webview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".JQMathActivity">
<com.rrtutors.androidlatex.CustomWebview
android:id="@+id/question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"
/>
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="40dp"
android:layout_gravity="center"
android:visibility="invisible"
android:layout_height="40dp"
/>
<Button
android:id="@+id/btn_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Load Data"
/>
</LinearLayout>
|
Step 3: Create simple json file which contains Latex Math Equations inside assets folder
Step 4: Read JSON file data from assets folder
fun loadFromAssets()
{
var string: String? = ""
try {
val inputStream: InputStream = assets.open("latex.json")
val size: Int = inputStream.available()
val buffer = ByteArray(size)
inputStream.read(buffer)
string = String(buffer)
quesValue=Utils.JQMath;
quesValue= quesValue+JSONObject(string).getString("data");
loadData();
} catch (e: IOException) {
e.printStackTrace()
}
}
|
Step 5: Load Latex Math Equations using Mat?hJa?x:
Append below String to json data and load into webview
Before loading to the webview make sure that you have enabled JavaScript property for webview using
Using JQMath
Append below String to json data and load into webview
var JS_FILES = "<script>\n" +
"MathJax = {" +
" tex: {" +
" inlineMath: [['$', '$'], ['\\(', '\\)']]\n" +
" }" +
"};" +
"</script>" +"<style type=\"text/css\">\n" +
"html, body {" +
"margin: 0px;" +
"padding: 0px;" +
"}" +
"</style>"+
"<script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js\"></script>\n" +
"<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css\" crossorigin=\"anonymous\">" +"<style>img{display: inline;height: auto;max-width: 100%;}</style>"
|
Step 6: Now load data to webview
fun loadData()
{
question.loadDataWithBaseURL("", quesValue, "text/html", "utf-8", "");
}
|
Step 7: Now run the application you can find Latex math equations in proper format
Complete activity code to load Latex Equations in Android application
package com.rrtutors.androidlatex
import android.os.Build
import android.os.Bundle
import android.provider.SyncStateContract
import android.util.Log
import android.view.View
import android.webkit.WebView
import android.widget.Button
import android.widget.ProgressBar
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.android.volley.*
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import org.json.JSONObject
import java.io.IOException
import java.io.InputStream
import javax.xml.transform.ErrorListener
class MathJSActivity : AppCompatActivity() {
lateinit var question:WebView
lateinit var btn_call:Button
lateinit var progressbar:ProgressBar
lateinit var mRequestQueue:RequestQueue
var quesValue="";
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressbar=findViewById(R.id.progressbar)
btn_call=findViewById(R.id.btn_call)
question=findViewById(R.id.question)
question.clearCache(true)
question.getSettings().setAllowFileAccess(true);
question.getSettings().setJavaScriptEnabled(true);
question.getSettings().setBuiltInZoomControls(false);
btn_call.setOnClickListener {
quesValue="";
loadFromAssets();
}
}
fun loadFromAssets()
{
var string: String? = ""
try {
val inputStream: InputStream = assets.open("latex.json")
val size: Int = inputStream.available()
val buffer = ByteArray(size)
inputStream.read(buffer)
string = String(buffer)
quesValue=Utils.JS_FILES;
quesValue= quesValue+JSONObject(string).getString("data");
loadData();
} catch (e: IOException) {
e.printStackTrace()
}
}
fun loadData()
{
question.loadDataWithBaseURL("", quesValue, "text/html", "utf-8", "");
}
}
|
Conclusion: In this Android Example tutorial we covered how to load Latex Math equations using JQMath and MathJax libraries. We can learn more in coming series how to load Math equations inside Android widgets