我有一个WebView和一些按钮在我的布局。在我的WebView中有一个很大的标签。这个应用程序用于编辑文本文件。这些按钮用于影响我的WebView中的文本区域。当用户按下一个按钮(比如移动文本视图的箭头按钮)时,它会关闭键盘。我使用了toggleSoftInput,但这只是切换键盘显示或不显示。我希望按钮停止隐藏软键盘时,按下按钮。关于我的具体问题,我什么也没找到。我已经找了几个星期了。有谁知道我怎么才能阻止我的按钮隐藏Android的软键盘吗?
解决这个问题的方法可能是让键盘始终显示,并让用户在操作完成时关闭它。
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
在Activity的onCreate()方法中试试这段代码。请注意,如果用户按下键盘上的关闭按钮或后退按钮,则应该关闭它。我想你不应该干涉这种情况。当操作完成后,您可以从代码中关闭键盘。
我也有同样的处境,所以如果你有一个理想的解决方案,我很乐意听到。
编辑:成功!或者说比以前好多了。我已经删除了原来的解决方案,因为这个更好。
如https://stackoverflow.com/a/10536033/513038所述,loadData()隐藏了键盘。然而,我发现在WebView的hideSoftKeyboard()中,它通过imm.isActive(mWebView)检查InputMethodManager来查看WebView是否活动。
所以,如果你在loadData()之前切换焦点到EditText,然后立即切换回WebView,键盘就会粘在那里!它短暂地切换到大写,我认为在返回焦点到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();
}
这应该可以让它工作,基本上。不过它有一些bug,所以这里有一个更完整的类:
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);
}
}
}
Xamarin Android (Alternative):
InputMethodManager inputManager = (InputMethodManager)GetSystemService(Context.InputMethodService);
inputManager.ToggleSoftInput (ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);