Я нахожусь в одной лодке, поэтому, если бы вы когда-нибудь нашли идеальное решение, я бы с удовольствием его услышал.
РЕДАКТИРОВАТЬ: Успех!Или, во всяком случае, намного лучше, чем раньше.Я удалил свое старое решение, поскольку оно лучше.
Как указано в https://stackoverflow.com/a/10536033/513038,, оказывается, что loadData () скрывает клавиатуру. Однако , я обнаружил, что в hideSoftKeyboard () WebView он проверяет InputMethodManager на предмет активности веб-просмотра через imm.isActive (mWebView).
Итак, если вы переключите фокусна EditText до loadData (), и сразу же после этого переключитесь обратно в WebView, клавиатура остается на месте!Он ненадолго переключается на верхний регистр, я думаю, что при возврате фокуса к веб-представлению (на самом деле, это, кажется, не всегда происходит, это зависит), но это намного менее заметно, чем мерцание клавиатуры назад и назад.
Суть того, что должно произойти, заключается в следующем.
Расширение WebView.Дайте ему поле EditText:
public EditText mFocusDistraction;
В конструкторе есть следующие строки:
mFocusDistraction = new EditText(context);
addView(mFocusDistraction);
Затем переопределите loadUrl ():
public void loadUrl(String s) {
mFocusDistraction.requestFocus();
super.loadUrl(s);
this.requestFocus();
}
Это должнозаставить его работать, в основном.Это немного глючит, так что вот более полный класс:
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.widget.EditText;
public class WebViewMod extends WebView {
public EditText mFocusDistraction;
public Context mContext;
public WebViewMod(Context context) {
super(context);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
super(context, attrs, defStyle, privateBrowsing);
init(context);
}
public void init(Context context) {
// This lets the layout editor display the view.
if (isInEditMode()) return;
mContext = context;
mFocusDistraction = new EditText(context);
mFocusDistraction.setBackgroundResource(android.R.color.transparent);
this.addView(mFocusDistraction);
mFocusDistraction.getLayoutParams().width = 1;
mFocusDistraction.getLayoutParams().height = 1;
}
@Override
public void loadUrl(final String url) {
if (mContext instanceof Activity && this.isFocused()) {
((Activity)mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
mFocusDistraction.requestFocus();
WebViewMod.super.loadUrl(url);
WebViewMod.this.requestFocus();
}
});
} else {
super.loadUrl(url);
}
}
}