RecycleView条目中包含多个EditText,解决EditText抢占焦点问题

开发环境:JDK:1.8  开发工具及版本:AndroidStudio3.1.2   gradle版本:4.4_all

需求以及问题描述:

Recycleview条目里面有多个输入框和其他控件,例如Textview,Spinner等,如图;


RecycleView条目中包含多个EditText,解决EditText抢占焦点问题_第1张图片

出现的问题是:当先点击一个EditText,光标显示时(此时已经手动收了软键盘),滑到屏幕下方,此时点击除EditText以外的控件,点击Spinner为例,选好内容后,屏幕会自动滑到之前那个EditText那里.


RecycleView条目中包含多个EditText,解决EditText抢占焦点问题_第2张图片
小生我文字功底不行,怕写的问题表达不清,特地拍了一个小视频描述具体问题,地址是优酷的,


小生我文字功底不行,怕写的问题表达不清楚,特地拍了一个小视频描述具体问题,地址是优酷的,有兴趣的看官可以看一下.


EditText抢占焦点问题描述

解决方法:

在这个RecycleView对应的界面,改写触摸事件,加一层关于EditText焦点的判断,直接上代码:

@Override

    public boolean dispatchTouchEvent(MotionEvent ev) {

        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

            // 获取当前焦点所在的控件;

            View view = getCurrentFocus();

            if (view != null && view instanceof EditText) {

                Rect r = new Rect();

                view.getGlobalVisibleRect(r);

                int rawX = (int) ev.getRawX();

                int rawY = (int) ev.getRawY();

                // 判断点击的点是否落在当前焦点所在的 view 上;

                if (!r.contains(rawX, rawY)) {

                    view.clearFocus();

                }

            }

        }

        return super.dispatchTouchEvent(ev);

    }

然后问题就解决了.

我原本以为还要处理条目里的EditText的点击事件重新获取焦点,发现不用了,估计是系统自动处理好了,不用重新处理EditText的点击事件了.

参考博客:https://blog.csdn.net/ly1414725328/article/details/50811314

有不足之处还请大家多多指教!!!

你可能感兴趣的:(RecycleView条目中包含多个EditText,解决EditText抢占焦点问题)