最近由于公司项目在做富文本编辑器使用到了一个开源的项目,这里也给出Github项目地址richeditor-android。
关于这个富文本编辑器的具体实现就不多说了,说一个存在的问题,由于富文本编辑器是基于webview通过JS动态添加html的方式实现的,而做android开发而且比较了解webview的人都知道,webview的api更新几个版本之后是各种坑,其中一个是loadurl执行js会收起软键盘,而Android4.4之后是通过evaluateJavascript加载的,这种方式不会导致收起软键盘。如何在低版本手机运行而不收起键盘,我浏览了各种解决方案,其中一个能够实现的是 Cordova android框架详解 所说的通过反射机制解决loadurl导致软键盘隐藏的问题。
下面这段代码是 Cordova中的描述:
private class PrivateApiBridgeMode extends BridgeMode
Field f = webViewClass.getDeclaredField("mProvider");
f.setAccessible(true);
webViewObject = f.get(webView);
webViewClass = webViewObject.getClass();
Field f = webViewClass.getDeclaredField("mWebViewCore");
f.setAccessible(true);
webViewCore = f.get(webViewObject);
if (webViewCore != null) {
sendMessageMethod = webViewCore.getClass().getDeclaredMethod("sendMessage", Message.class);
sendMessageMethod.setAccessible(true);
}
Message execJsMessage = Message.obtain(null, EXECUTE_JS, url);
sendMessageMethod.invoke(webViewCore, execJsMessage);
下面放出的demo是经过修改的,解决了这一个问题,同时也添加了一些额外功能,比如加载本地图片,弹出窗口提示删除图片等,有需要可以看看: