我在布局中有一个WebView和一些按钮。我的WebView中有一个大的<textarea>标签。这个应用程序用于编辑文本文件。按钮用于影响WebView内部的文本区域。当用户按下一个按钮(例如箭头按钮以移动文本视图)时,它会关闭键盘。我已经使用了toggleSoftInput,但那只是切换键盘的显示或隐藏。我希望按钮在被按下时不再隐藏软键盘。我对我的具体问题找不到任何解决方法。我已经搜索了几周。有人知道如何停止Android上的按钮隐藏软键盘吗?
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
将以下代码放在Activity的onCreate()方法中试一试。 请注意,如果用户按下键盘上的关闭按钮或返回按钮,则应该关闭它。我猜你不应该干扰这种情况。 当操作完成后,你可以从代码中关闭键盘。
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);
}
}
}
Xamarin Android(替代方案):
InputMethodManager inputManager = (InputMethodManager)GetSystemService(Context.InputMethodService);
inputManager.ToggleSoftInput (ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);