Last active
August 8, 2021 09:42
-
-
Save BurningAXE/6527743bc632d36d2eb3a9bef72400c1 to your computer and use it in GitHub Desktop.
An Android component that allows to show AND edit text in HTML format using a WebView
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.util.AttributeSet; | |
import android.util.Xml; | |
import android.webkit.JavascriptInterface; | |
import android.webkit.WebView; | |
import android.webkit.WebViewClient; | |
public class HtmlTextEditor extends WebView { | |
class JsObject { | |
// This field always keeps the latest edited text | |
public String text; | |
@JavascriptInterface | |
public void textDidChange(String newText) { | |
text = newText.replace("\n", ""); | |
} | |
} | |
private JsObject mJsObject; | |
public HtmlTextEditor(Context context, AttributeSet attrs) { | |
super(context, attrs); | |
getSettings().setJavaScriptEnabled(true); | |
mJsObject = new JsObject(); | |
addJavascriptInterface(mJsObject, "injectedObject"); | |
setWebViewClient(new WebViewClient(){ | |
@Override | |
public void onPageFinished(WebView view, String url) { | |
super.onPageFinished(view, url); | |
loadUrl( | |
"javascript:(function() { " + | |
" var editor = document.getElementById(\"editor\");" + | |
" editor.addEventListener(\"input\", function() {" + | |
" injectedObject.textDidChange(editor.innerHTML);" + | |
" }, false)" + | |
"})()"); | |
} | |
}); | |
} | |
public void setText(String text) { | |
if (text == null) { text = ""; } | |
String editableHtmlTemplate = "<!DOCTYPE html>" + "<html>" + "<head>" + "<meta name=\"viewport\" content=\"initial-scale=1.0\" />" + "</head>" + "<body>" + "<div id=\"editor\" contenteditable=\"true\">___REPLACE___</div>" + "</body>" + "</html>"; | |
String editableHtml = editableHtmlTemplate.replace("___REPLACE___", text); | |
loadData(editableHtml, "text/html; charset=utf-8", "UTF-8"); | |
// Init the text field in case it's read without editing the text before | |
mJsObject.text = text; | |
} | |
public String getText() { | |
return mJsObject.text; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment