Android - 如何在具有多个EditTexts的对话框中隐藏软键盘,当单击其中任何一个文本时?



我想知道,在具有多个 EditText 的对话框中,如果用户单击其中任何一个文本之外,是否有任何方法可以隐藏软键盘? 这个对话框有很多编辑文本,我想要一种简单的方法来让用户隐藏软键盘。

由于 EditText采用表格的形式,我不喜欢对每个 EditText 使用imeOptions="actionDone",因为有时用户需要在整个列中输入数据。 但是,如果用户只需要输入部分数据,我希望用户可以在任何 EditText 外部单击并隐藏软键盘。

我在这里查找了几种解决方案,但似乎都不适合我的方案。 它们似乎只在一项活动中起作用。

您是否尝试过为所有这些EditText的父级设置ViewGroupOnTouchListener? 当MotionEvent不被其中任何一个使用时(方法返回true/false),然后运行您的方法hideKeyboard();?(一些例子在这里)

你也写了

我想要一种简单的方法来让用户隐藏软键盘。

Back物理/屏幕按钮不是用来做到这一点的吗?始终可以在设备正面的同一位置访问,最简单的方法...(对于普通设备,也许您有一些自定义...但我承认,在任何EditText关闭键盘之外触摸都是对UX友好的

好的,看起来将根和子容器视图设置为clickablefocusablefocusableInTouchModetrue完成,以及以下代码:

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" 

相关内容

  • 没有找到相关文章

最新更新