一起Talk Android吧(第三百零五回:EditText的常用事件一)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百零五回:EditText的常用事件一)相关的知识,希望对你有一定的参考价值。

各位看官们,大家好,上一回中咱们说的是android中EditText常用属性的例子,这一回咱们说的例子是EditText的常用事件。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,本章回中我们将介绍EditText的其它常用事件,主要是触摸事件和输入内容响应事件,接下来我们详细介绍它们。

触摸事件

触摸事件表示我们手指在屏幕上按下或者滑动时的触发的事件,我们介绍触摸事件主要是想通过触摸事件来隐藏由输入内容引入的键盘。

工作场景:触摸输入框时会自动弹出输入法键盘,输入相关内容后键盘不会自动隐藏,因此我们想通过点击屏幕来隐藏键盘,这里说有屏幕主要指屏幕上输入框以外的区域。

解决思路:判断当前触摸区域是否是EditText区域,如果不是就隐藏键盘。

在此解决思路的基础上,我们介绍一下详细的实现步骤:

  • 1.获取输入框的坐标位置,使用getCurrentFocus()方法可以获取到输入框的所在的View;
  • 2.通过View的getLocationInWindow()方法获取到输入框左上角的坐标位置;
  • 3.通过左上角的坐标计算出输入框在屏幕上的坐标区域;
  • 4.在Activity中通过重写onTouchEvent()方法来捕获当前页面的触摸事件;
  • 5.获取触摸事件的坐标,并且判断此坐标是否在输入框的坐标区域中;
  • 6.获取InputMethodManager并且使用它的hideSoftInputFromWindow()方法隐藏输入框;

下面是具体的示例代码,请大家参考:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        InputMethodManager mInputMethodManager = null;

        if(mInputMethodManager == null) {
            mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        }

        if(event.getAction() == MotionEvent.ACTION_UP) {
            View view = getCurrentFocus();
            if(view != null && mInputMethodManager != null && IsHideKeyboard(view,event) ) {
                mInputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                view.clearFocus();
            }
        }

        return super.onTouchEvent(event);
    }

    private boolean IsHideKeyboard (View view ,MotionEvent event) {
        int left,top,right,bottom;
        boolean res = true;

        if(view != null && view instanceof EditText) {
            int [] location = {0,0};
            view.getLocationInWindow(location);
            left = location[0];
            top = location[1];
            bottom = top+view.getHeight();
            right = left + view.getWidth();

            //判断触摸事件是否在EditText区域坐标内
            if(event.getX() > left && event.getX() <right && event.getY() >top && event.getY() <bottom) {
                res = false;
            }
        }
        return res;
    }

我们没有展示完整的示例,大家只需要创建一个Activity并且在其中添加一个EditText控件就可以,然后把此代码添加到Activity所有的类中,最后运行程序时达到以下效果就可以:点击输入框弹出输入法键盘,点击输入框以外的区域,输入法键盘消失。

各位看官,关于Android中EditText常用事件的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百零五回:EditText的常用事件一)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第五百零五回:如何调整组件在约束布局中的大小)

一起Talk Android吧(第三百零九回:风格VS主题)

一起Talk Android吧(第三百一十五回:Android中的ActionBar)

一起Talk Android吧(第三百二十五回:Android中网络通信之TCP通信模型二)

一起Talk Android吧(第三百四十五回:解析JSON对象)

一起Talk Android吧(第三百三十五回: Android中的HTTP请求二)