Android 输入完成后点击其他地方使EditText隐藏光标和隐藏软键盘的实现

前言

在项目中经常使用EditText 非常方便 但是EditText 的光标总是闪烁
对于用户来说体验感不佳 也可以说是不完美的一个功能
如何优化用户体验是我们对产品的态度

隐藏光标和软键盘效果图

Android 输入完成后点击其他地方使EditText隐藏光标和隐藏软键盘的实现_第1张图片

如何隐藏EditText光标

一开始想到的就是让父布局去争夺子控件的焦点 这样来实现
就是在点击父窗体的时候 这时候强行用代码 来把焦点获取到 取消Edittext的焦点
这样实现是可以实现 但是不完美 每次点击父窗体 整个View都闪烁一下 难看极了

另外一种解决方法 看下面

↓↓

封装工具HideInput

 /**
     * 获取点击事件
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            View view = getCurrentFocus();
            if (isHideInput(view, ev)) {
                HideSoftInput(view.getWindowToken());
                view.clearFocus();
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     * 判定是否需要隐藏
     */
    private boolean isHideInput(View v, MotionEvent ev) {
        if (v != null && (v instanceof EditText)) {
            int[] l = {0, 0};
            v.getLocationInWindow(l);
            int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth();
            if (ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom) {
                return false;
            } else {
                return true;
            }
        }
        return false;
    }

    /**
     * 隐藏软键盘
     */
    private void HideSoftInput(IBinder token) {
        if (token != null) {
            InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            manager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

使用方法

集成封装好的工具类 自动实现光标的隐藏和软键盘

//集成封装好的工具类 自动实现光标的隐藏和软键盘
public class WithdrawActivity extends HideInputActivity {
		//doing something
}

共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
Android 输入完成后点击其他地方使EditText隐藏光标和隐藏软键盘的实现_第2张图片

你可能感兴趣的:(Android,组件,移动开发,android,EditText焦点隐藏,隐藏软键盘)