java无法在使用InAppBrowser和spinner加载页面后键入输入字段
我有一个非常有趣的问题。我在一个Android应用程序中使用InApp浏览器和spinner。微调器是用ProgressDialog
实现的。这里的问题是,当我尝试通过inAppBrowser打开网页时,加载微调器在页面开始加载后开始加载,然后在页面加载完成后关闭,当我点击该页面的输入字段并尝试键入字母或数字时,它只会停留在所谓的“锁定”状态。如果我输入了看不见的内容,光标就会一直闪烁
为了让这更奇怪,我可以输入特殊的字符。如果我点击页面周围的任何其他位置,然后再次点击相同的输入字段,那么它就工作了。另一种情况是,当我将应用程序置于暂停状态,然后恢复它时,输入字段就会工作
此问题仅在5.0.1及更高版本的Android平台中出现
inAppBrowser java文件可以在Github的InAppBrowser java file中找到
我的微调器实现如下所示:
spinner = new ProgressDialog(cordova.getActivity());
spinner.setIndeterminate(false);
spinner.setProgressStyle(ProgressDialog.STYLE_SPINNER);
spinner.setCancelable(false);
spinner.setMessage(cordova.getActivity().getText(R.string.spinner_loading));
spinner.setTitle("");
我使用以下方式显示/隐藏微调器:
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//InAppBrowser default code....
try {
JSONObject obj = new JSONObject();
obj.put("type", LOAD_START_EVENT);
obj.put("url", newloc);
sendUpdate(obj, true);
} catch (JSONException ex) {
Log.d(LOG_TAG, "Should never happen");
}
spinner.show();
}
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
try {
JSONObject obj = new JSONObject();
obj.put("type", LOAD_STOP_EVENT);
obj.put("url", url);
sendUpdate(obj, true);
} catch (JSONException ex) {
Log.d(LOG_TAG, "Should never happen");
}
spinner.hide();
}
这里有什么问题?如有任何提示和建议,将不胜感激
# 1 楼答案
如果有人仍然像我一样遇到这个问题,请尝试将iApp浏览器插件更新到最新版本(1.7.2)
版本1.7.2有这样的fix
我用的是爱奥尼亚(v3)
# 2 楼答案
现在我可以解决这个问题了。问题在于特定页面输入字段的焦点。由于某种原因,一旦页面加载完毕,它就没有把焦点放在自己身上
试图通过使用
editText.clearFocus()
和editText.requestFocus()
来修复InApp Browser的inAppBrowser.java
文件中的问题根本没有帮助。但对我有效的是以下解决方案由于InApp Browser有一个名为
executeScript()
的方法,所以我能够向出现此问题的特定输入字段注入一些Javascript代码。因此,下面的代码起到了作用:该代码的作用是,它将首先清除该特定元素的焦点,然后再次关注该元素
这项技术可以在任何平台上运行,而不管版本是什么