我想知道,在具有多个 EditText 的对话框中,如果用户单击其中任何一个文本之外,是否有任何方法可以隐藏软键盘? 这个对话框有很多编辑文本,我想要一种简单的方法来让用户隐藏软键盘。
由于 EditText采用表格的形式,我不喜欢对每个 EditText 使用imeOptions="actionDone"
,因为有时用户需要在整个列中输入数据。 但是,如果用户只需要输入部分数据,我希望用户可以在任何 EditText 外部单击并隐藏软键盘。
我在这里查找了几种解决方案,但似乎都不适合我的方案。 它们似乎只在一项活动中起作用。
您是否尝试过为所有这些EditText
的父级设置ViewGroup
OnTouchListener
? 当MotionEvent
不被其中任何一个使用时(方法返回true
/false
),然后运行您的方法hideKeyboard();
?(一些例子在这里)
你也写了
我想要一种简单的方法来让用户隐藏软键盘。
Back
物理/屏幕按钮不是用来做到这一点的吗?始终可以在设备正面的同一位置访问,最简单的方法...(对于普通设备,也许您有一些自定义...但我承认,在任何EditText
关闭键盘之外触摸都是对UX友好的
好的,看起来将根和子容器视图设置为clickable
、focusable
和focusableInTouchMode
以true
完成,以及以下代码:
public void hideKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
public void setupDialog(View view) {
// Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
hideKeyboard(view);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupDialog(innerView);
}
}
}
传入对话框根视图 id 的位置。
没有用户在 EditText 之外单击以逃避它。您最好使用"actionGo"或"actionDone"作为输入字段。
但如果你真的需要它,我建议使用onFocusChangeListener。 使用此代码隐藏键盘:
InputMethodManager imm = (InputMethodManager) getSystemService(
INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
然后检查您的编辑文本是否有这个:
android:clickable="true"
android:focusableInTouchMode="true"