Android Fragments 在编辑片段中的文本外单击时关闭键盘[重复]

h43kikqp  于 2022-12-29  发布在  Android
关注(0)|答案(1)|浏览(120)
    • 此问题在此处已有答案**:

How to hide soft keyboard on android after clicking outside EditText?(49个答案)
Hide keypad in android while touching outside Edit Text Area(3个答案)
四年前关闭了。
我有一个片段,其中包含用于搜索输入的EditText和ListView。我已经使搜索部分正常工作,但现在我希望在用户单击屏幕上EditText之外的时关闭键盘。我还希望使用click事件(因为它是一个ListView,如果我不使用click事件,用户可能会意外地单击他们不想打开的ListView项)
我知道如何在一个活动中做到这一点,但对于片段来说似乎有所不同。
目前为止我尝试的方法是:

  • 在片段中实现View.OnClickListener并实现onClick,如下所示:
@Override
public void onClick(View v) {
    System.out.println("onClick true");
    if (!(v instanceof EditText)) {
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.
                INPUT_METHOD_SERVICE);
        if (getActivity().getCurrentFocus() != null) {
            imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
        }
    }
}

当我点击的时候,这似乎从来没有发布过"onClick true"。

  • 重写片段Activity中的onTouchEvent并按如下方式实现onTouchEvent:
@Override
public boolean onTouchEvent(final MotionEvent event) {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.
            INPUT_METHOD_SERVICE);
    if (getCurrentFocus() != null) {
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
    return true;
}

任何帮助都将不胜感激。先谢了。

ecfdbz9o

ecfdbz9o1#

如果我理解正确,您可以尝试使用OnFocusChangeListener:

yourEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            final InputMethodManager inputManager = (InputMethodManager) getAppContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            if (inputManager != null && !hasFocus) {
                inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }
    });

这只是一个例子,但也许它指向了正确的方向。

相关问题