当WebView再次调用'loadUrl'时,HTML文本输入中的键盘消失

Jr.*_*Jr. 7 android

我使用WebView作为我的Androind App.我遇到了问题,请求解决方案寻求帮助.

HTML页面中有一个文本字段.当它"聚焦"然后我打电话

          mWebView.setFocusableInTouchMode(true);
Run Code Online (Sandbox Code Playgroud)

在Java代码中,Android软键盘会弹出让我键入.

问题是我需要在Java和调用中使用多线程来处理某些进程

          mWebView.loadUrl(strJSCall); 
Run Code Online (Sandbox Code Playgroud)

作为回调执行JavaScript函数,但键盘被隐藏!

我尝试的方法是强制键盘再次显示.但是,当调用'loadUrl'时,键盘如何显示?任何人都遇到同样的问题并已经解决了吗?

真诚的,小

Joe*_*e B 5

loadUrl的问题在于它会中断UI线程并仍然会关闭输入方法.唯一可行的方法是检查光标在webview上的内容,并覆盖webview上的默认loadUrl行为.

在您的自定义webview中:

@Override
public void loadUrl(String url) {
    HitTestResult testResult = this.getHitTestResult();
    if (url.startsWith("javascript:)" && testResult != null && testResult.getType() == HitTestResult.EDIT_TEXT_TYPE)
    {
            //Don't do anything right now, we have an active cursor on the EDIT TEXT
            //This should be Input Method Independent
    }
    else
    {
        super.loadUrl(url);
    }
}
Run Code Online (Sandbox Code Playgroud)

当您专注于webkit中的文本字段时,这将阻止本机端加载Javascript.它并不完美但它避免了通过调整WebView的大小来判断文本字段是否可见的混乱.在webview中执行的Javascript应该仍然​​可以正常工作.

同样,如果您在键入时需要更新某些内容,则可能必须找到另一种方法让Java与不阻止UI线程的Javascript进行通信.这是一个我仍然没有正确解决的难题.


小智 2

我也有同样的问题,而且还没有完全解决。

我已经能够在调用 webView.loadUrl 后强制显示键盘,首先您需要查明键盘是否显示,我使用了此How to check Visibility of software Keyboard in Android? 的修改版本?

然后打电话

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(webview, InputMethodManager.SHOW_IMPLICIT);
Run Code Online (Sandbox Code Playgroud)

但是,如果像我一样,您需要在每次按键后与 WebView 中的 JavaScript 进行通信,那么这种方法会导致键盘在尝试上下动画时闪烁。
它还会错过一些输入,具体取决于您键入的速度。