用户点击recyclerView时关闭键盘

时间:2017-03-07 10:25:11

标签: android

我有一个 <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@drawable/header_shape_rect"> ,而下面有一个RecyclerView。我希望当用户点击EditText以外关闭键盘时。

我搜索并找到了这个答案here,但它对我不起作用。用户点击外部但EditText仍有焦点。

我的XML代码是:

EditText

3 个答案:

答案 0 :(得分:2)

只需将onTouchListener()设置为RecyclerView并从中调用hideKeyboard()方法。

答案 1 :(得分:1)

editText失去它的焦点时关闭它。

像那样:

EditText editText = (EditText) findViewById(R.id.edittxt);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // code to execute when EditText loses focus
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
        }
    }
});

答案 2 :(得分:1)

在recyclerview touch listener上调用此方法......

public static void hideKeyboard(final Activity activity) {
    final View view = activity.getCurrentFocus();
    final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (view == null) {
                View view2 = new View(activity);
                imm.hideSoftInputFromWindow(view2.getWindowToken(), 0);
            } else {
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }
    }, 125);
}