在 WebView 中,当我通过 webview.loadUrl() 执行 JavaScript 时,如果软键盘可见,它就会消失。当我尝试在 html 文本字段中键入一些文本时,软键盘消失(如果执行 JavaScript)并且我无法键入所有文本。
文本字段没有失去焦点,因此提示仍在文本字段上,但软键盘下降。
有人能告诉我如何解决吗?
在 WebView 中,当我通过 webview.loadUrl() 执行 JavaScript 时,如果软键盘可见,它就会消失。当我尝试在 html 文本字段中键入一些文本时,软键盘消失(如果执行 JavaScript)并且我无法键入所有文本。
文本字段没有失去焦点,因此提示仍在文本字段上,但软键盘下降。
有人能告诉我如何解决吗?
最简单的方法是将 javascript 调用存储在插件或 JavascriptInterface 中,并在您的 javascript 端执行它的重复方法。这种方式loadUrl
永远不会被调用。
就像是:
StringBuilder sb = null;
private final Object LOCK = new Object();
public void sendJavascript(String js){
synchronized(LOCK) {
if (sb == null){
sb = new StringBuilder();
sb.append("javascript:");
}
sb.append(js):
}
}
然后使用 javascriptInterface:
private class JsInterface {
@JavascriptInterface
public String getJavascript(){
synchronized(LOCK) {
String javascriptToRun = sb.toString();
sb = new StringBuilder();
sb.append("javascript:");
return javascriptToRun;
}
}
}
将您的 javascript 界面添加到您的 webview:
JsInterface jsInterface = new JavascriptInterface();
webview.addJavascriptInterface(jsInterface, "JsInterface");
并在您的 javascript 代码上设置检索存储函数的时间间隔。
编辑
我刚刚找到这个答案,它表明我的问题很大,方法不同步。这意味着当你调用getJavascript()
我们的变量时sb
可能还没有准备好被读取。我已将相关位添加到上面的源代码中。
使用锁,否则您的代码将不可靠
这是一种预期的行为:通过调用WebView.loadUrl()
您基本上是在重新加载页面,因此软键盘被解除。
或者,您可以尝试确定是否显示软键盘并延迟 JS 执行直到它被隐藏。有关检查软键盘状态的一般方法,请参阅如何检查 Android 中软键盘的可见性?