当WebView再次调用“loadUrl”时,HTML文本input中的键盘消失

我使用WebView为我的Androind应用程序。 我遇到了一个问题,并要求解决scheme的帮助。

HTML页面中有一个文本框。 当它得到“重点”,然后我打电话

mWebView.setFocusableInTouchMode(true); 

在Java代码中,这样Android软键盘就会popup让我键入。

问题是我需要使用multithreading的Java和一些进程调用

  mWebView.loadUrl(strJSCall); 

作为执行JavaScript函数的callback,但键盘被隐藏起来!

我尝试的方法是强制键盘再次显示。 但是,当“loadUrl”被调用时,键盘如何显示? 剂量谁遇到同样的问题,并已经解决了?

小心

Solutions Collecting From Web of "当WebView再次调用“loadUrl”时,HTML文本input中的键盘消失"

loadUrl的问题是它会中断UI线程,并且仍然closuresinput方法。 唯一可行的方法是检查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); } } 

这会阻止本地方在您关注webkit中的文本字段时加载Javascript。 这不是完美的,但是它避免了通过调整WebView的大小来弄清楚你的文本字段是否可见。 在webview中执行的Javascript应该仍然​​可以正常工作。

同样,如果你在input的时候需要更新一些东西,你可能需要find另一种方式让Java和Javascript通信,而不会阻塞UI线程。 这是一个很难解决的问题。

我有同样的问题,还没有完全解决它。

我已经能够在调用webView.loadUrl后强制键盘显示,首先你需要找出键盘是否显示,我用这个修改版本如何检查Android软件键盘的可见性?

然后打电话

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(webview, InputMethodManager.SHOW_IMPLICIT); 

但是,如果像我一样,每次按下按键之后都需要与WebView中的JavaScript进行通信,这种方法会导致键盘闪烁,因为它试图上下animation。
它也错过了一些input取决于你input的速度。

在Android中,从WebView执行javascript是单向的:调用WebView.loadUrl(“javascript:sub(1,1)”); 你不能直接得到返回值。

有一个asynchronous的方式来获得JavaScript函数的返回值: 如何从android的webview的JavaScript中获得返回值?

但在大多数情况下,我们需要一个同步方法,而不是asynchronous方式。 例如,点击事件传递到Android WebView的onTouch方法时,我们想要执行JavaScript来读取单击的元素信息。

我已经尝试了两种解决scheme:1.使用Java P / Vvariables从asynchronous包装同步方法,解决scheme如下所示: 如何从android的webview中的JavaScript获取返回值?

该解决scheme完全不工作,因为等待方法将阻止JavaScript和JavaScriptInterface的执行。 所以如果我们想在UI线程中得到一个js方法的结果。 这是不可能的。

  1. 使用Javareflection获取stringByEvaluatingJavaScriptFromString的本地接口。 为Android存在stringByEvaluatingJavaScriptFromString

工作得很好,唯一需要关心的是当页面加载完成时的初始reflection方法。 我试图在WebView的构造函数中初始化reflection,但是失败了。 我认为构造函数是asynchronous方法。