我的布局中有一个WebView和一些按钮。我的WebView中有一个大标签。此应用程序用于编辑文本文件。这些按钮用于影响WebView中的textarea。当用户按下按钮(例如箭头按钮以移动文本视图)时,它会关闭键盘。我使用过toggleSoftInput,但这只是切换键盘显示与否。我希望按钮在按下按钮时停止隐藏软键盘。我没有发现我的具体问题。我搜索了好几个星期。任何人都知道如何阻止我的按钮隐藏Android上的软键盘?
答案 0 :(得分:5)
问题的解决方案可能是始终显示键盘并让用户在操作完成后关闭它。
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
在Activity的onCreate()方法中尝试此代码。 请注意,如果用户按下键盘上的关闭按钮或后退按钮,则应将其关闭。我想你不应该干涉那种情况。 完成操作后,您可以从代码中关闭键盘。
答案 1 :(得分:4)
我在同一条船上,所以如果你找到了理想的解决方案,我很乐意听到它。
编辑: 成功!或者比以前好多了,无论如何。我删除了旧的解决方案,因为这个更好。
如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();
}
基本上应该让它运转起来。不过,这有点儿马车,所以这里有一个更完整的课程:
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);
}
}
}
答案 2 :(得分:0)
Xamarin Android(替代方案):
InputMethodManager inputManager = (InputMethodManager)GetSystemService(Context.InputMethodService);
inputManager.ToggleSoftInput (ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);