6

我想知道在将文本输入到 EditText 后隐藏键盘的最佳方法。

1) setonfocuschangelistener :这个监听器是否仅在按下完成按钮或焦点从一个 EditText 变为另一个时触发?当我使用这种方法时,我无法隐藏键盘。

2) setOnTouchListener :当我使用它时,我可以隐藏键盘,但我怀疑这可能存在问题。在这种情况下,我将触摸侦听器添加到根 LinearLayout。以下代码我使用过:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    txtUserName = (EditText)findViewById(R.id.txtUserName);
    btnLogin = (Button)findViewById(R.id.btnLogin);
    layoutView = (LinearLayout)findViewById(R.id.li);

    layoutView.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(txtUserName
                    .getWindowToken(), 0);
            return true;
        }
    });
}

在主 LinearLayout 中,我使用了另外两个 LinearLayout。我遇到上述代码的问题是,当我按下时,键盘并没有隐藏。我的疑问是我只添加带有根布局的触摸侦听器,而不是给带有其他内部布局或其他控件(TextView)的触摸侦听器。当我触摸其他控件或 TextView 周围的某些点(即内部布局)时,键盘不会隐藏。

这意味着我是否需要将 touchListener 添加到根布局内的所有布局或控件?如何更好地处理这种情况?

4

5 回答 5

15

您可以使用此代码

InputMethodManager imm = 
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditView.getWindowToken(), 0);
于 2012-05-11T11:59:31.533 回答
9

我对这个问题的回答:

添加这个方法:

public static void hideSoftKeyboard(Activity activity) {
  InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
  inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

如果你想在触摸屏时隐藏键盘,你可以这样做:

@Override
public boolean onTouchEvent(MotionEvent event) {
 hideSoftKeyboard(LoginActivity.this);
 return false;
}

希望这会帮助你。

于 2013-04-13T09:05:28.057 回答
5

尝试这个 :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

它可以用来抑制键盘,直到用户实际触摸到 edittext 视图。

或者

 inputManager.hideSoftInputFromWindow(editView.getWindowToken(), 0);
于 2012-05-11T11:18:36.940 回答
2

对nulltry-catch的简单检查可以避免NullPointerExceptionif 没有聚焦视图。

public void hideKeyboard(Activity activity) {
    InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus()
                    .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
}
于 2014-01-08T21:07:20.350 回答
-1

隐藏键盘的最佳方式,就dispatchDoneKey在您的活动中。如果键盘处于可见状态,则键盘将被隐藏。

public void dispatchDoneKey() {
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
于 2013-09-05T12:51:23.653 回答