首页 文章

在按钮上关闭键盘单击该关闭片段

提问于
浏览
5

如何在按钮单击时关闭键盘?我有一个片段,它有一个EditText和两个按钮 . 一个提交EditText内容,另一个只是关闭片段 . 现在当片段消失时,键盘会停留 . 但是,按后退按钮会关闭键盘或单击“完成”也会关闭它 . 但我需要的是当片段关闭时键盘消失 .

我尝试过类似问题的解决方案hereherehere,但似乎都没有 . 他们中的大多数人都扔了 NullPointerException . 一切都是为了活动而不是碎片 . 调用键盘的代码有效:

editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

但是我必须添加getActivity()才能使它工作 .

任何帮助将不胜感激 .

3 回答

  • 10

    使用此方法

    public void hideKeyboard() {
        // Check if no view has focus:
        View view = getActivity().getCurrentFocus();
        if (view != null) {
            InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
    
  • 3

    对于片段使用以下函数

    public static void hideKeyboard(Activity activity) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        //Find the currently focused view, so we can grab the correct window token from it.
        View view = activity.getCurrentFocus();
        //If no view currently has focus, create a new one, just so we can grab a window token from it
        if (view == null) {
            view = new View(activity);
        }
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    

    单击按钮时调用它

    btn_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                hideKeyboard(getActivity());
            }
        });
    
  • 6

    尝试以下方法

    public static void hideKeyboard(Context mContext) {
    
        try {
    
            View view = ((Activity) mContext).getWindow().getCurrentFocus();
    
            if (view != null && view.getWindowToken() != null) {
    
                IBinder binder = view.getWindowToken();
    
                InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(binder, 0);
    
            }
    
        } catch (NullPointerException e) {
    
            e.printStackTrace();
    
        }
    
    }
    

    在此方法中,您必须传递上下文参数 . 希望它会帮助你 .

相关问题