7

在 WebView 中,当我通过 webview.loadUrl() 执行 JavaScript 时,如果软键盘可见,它就会消失。当我尝试在 html 文本字段中键入一些文本时,软键盘消失(如果执行 JavaScript)并且我无法键入所有文本。

文本字段没有失去焦点,因此提示仍在文本字段上,但软键盘下降。

有人能告诉我如何解决吗?

4

2 回答 2

5

最简单的方法是将 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可能还没有准备好被读取。我已将相关位添加到上面的源代码中。

使用锁,否则您的代码将不可靠

于 2013-07-08T21:33:23.097 回答
1

这是一种预期的行为:通过调用WebView.loadUrl()您基本上是在重新加载页面,因此软键盘被解除。

或者,您可以尝试确定是否显示软键盘并延迟 JS 执行直到它被隐藏。有关检查软键盘状态的一般方法,请参阅如何检查 Android 中软键盘的可见性?

于 2013-07-04T16:09:51.713 回答