失去焦点时隐藏软键盘

asc*_*sco 41 android

当我们有一个EditText并且它失去焦点(对于不需要键盘的元素)时,软键盘应该自动隐藏还是我们应该自己隐藏它?

我正在将焦点从AutoCompleteSearchView(EditText我的行为应该像我猜的那样)移动到a Button,requestFocus()返回true,但键盘不会隐藏.

lee*_*d92 63

最好的方法是为EditText设置OnFocusChangeListener,然后将键盘中的代码添加到侦听器的OnFocusChange方法中.当EditText失去焦点时,Android将自动关闭键盘.

你的OnCreate方法中有类似的东西:

EditText editText = (EditText) findViewById(R.id.textbox);
OnFocusChangeListener ofcListener = new MyFocusChangeListener();
editText.setOnFocusChangeListener(ofcListener);
Run Code Online (Sandbox Code Playgroud)

然后添加类:

private class MyFocusChangeListener implements OnFocusChangeListener {

    public void onFocusChange(View v, boolean hasFocus){

        if(v.getId() == R.id.textbox && !hasFocus) {

            InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 然后必须为应用程序上的每个editText组件完成它?是不是有任何全局设置来定义此行为?如果没有,并且应用程序中有很多editTexts,我建议扩展editText类,将监听器添加到扩展类并在应用程序中使用修改后的类 (14认同)
  • 如何自动制作?如果我有150到25个表格,我不想每次都这样做......这个功能应该是显而易见的. (8认同)

sti*_*ike 7

Android不会为您隐藏键盘.如果您希望键盘在EditText失去焦点时隐藏,请尝试在该事件上使用这样的方法:

private void hideKeypad() {
    EditText edtView = (EditText) findViewById(R.id.e_id);

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(edtView.getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

试试这个

 /**
 * Hide keyboard on touch of UI
 */
public void hideKeyboard(View view) {

    if (view instanceof ViewGroup) {

        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

            View innerView = ((ViewGroup) view).getChildAt(i);

            hideKeyboard(innerView);
        }
    }
    if (!(view instanceof EditText)) {

        view.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(v);
                return false;
            }

        });
    }

}

/**
 * Hide keyboard while focus is moved
 */
public void hideSoftKeyboard(View view) {
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) contentsContext_
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputManager != null) {
            if (android.os.Build.VERSION.SDK_INT < 11) {
                inputManager.hideSoftInputFromWindow(view.getWindowToken(),
                        0);
            } else {
                if (this.getCurrentFocus() != null) {
                    inputManager.hideSoftInputFromWindow(this
                            .getCurrentFocus().getWindowToken(),
                            InputMethodManager.HIDE_NOT_ALWAYS);
                }
                view.clearFocus();
            }
            view.clearFocus();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Dip*_*iya 5

试试这个,也许它会解决你的问题。

private void hideKeyboard() {
    InputMethodManager mImMan = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    mImMan.hideSoftInputFromWindow(mYourEdttxtName.getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)

您可以从这里找到更多信息