Android中点击空白区域隐藏软键盘功能实现
2015-07-02 21:26
627 查看
Android中软键盘弹出后,通常只能通过返回键来将其收起来(有些输入法自己在键盘的上方增加了一个按钮,点击后可以隐藏软键盘,不过这不是通用的方法,很多输入法并没有实现这样的功能)。比较好的做法是,让用户可以点击键盘外的任意空白区域来隐藏软键盘。
实现方法很简单,只需要重写Activity的onTouchEvent()方法,在onTouchEvent()方法中判断,如果当前软键盘是显示状态,就将其隐藏。
这里涉及到两个问题:
1. 如何判断软键盘是否是显示状态
2. 如何隐藏软键盘
这两个问题在前两篇博文中已经详细的分析了,这里只需要直接使用就可以了。
示例代码如下。
mIsSoftKeyboardShowing表示当前软键盘处于显示状态。
这样重写onTouchEvent后,就可以实现点击任意空白区域隐藏软键盘。
需要注意的是,这里实现的是点击任意空白区域隐藏软键盘,而不是点击任意区域隐藏软键盘。当点击软键盘所在区域时,软键盘会消费本次点击事件,产生文字输入;当点击软键盘外的EditText时,EditText会消费本次点击事件,改变输入光标的位置;当点击软键盘外设置了OnClickListener的Button、ImageView时,Button、ImageView会消费本次点击事件,执行相应的OnClick方法。。。所有的这些操作都不会触发Activity中的onTouchEvent(),只有点击到空白区域时,才会触发Activity中的onTouchEvent()。这涉及到TouchEvent的分发机制,关于TouchEvent的分发机制这里就不做介绍了。
实现方法很简单,只需要重写Activity的onTouchEvent()方法,在onTouchEvent()方法中判断,如果当前软键盘是显示状态,就将其隐藏。
这里涉及到两个问题:
1. 如何判断软键盘是否是显示状态
2. 如何隐藏软键盘
这两个问题在前两篇博文中已经详细的分析了,这里只需要直接使用就可以了。
示例代码如下。
[code]@Override public boolean onTouchEvent(MotionEvent event) { if (mIsSoftKeyboardShowing) { InputMethodManager imm = (InputMethodManager) ContextUtil.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); } return true; } else { return super.onTouchEvent(event); } }
mIsSoftKeyboardShowing表示当前软键盘处于显示状态。
这样重写onTouchEvent后,就可以实现点击任意空白区域隐藏软键盘。
需要注意的是,这里实现的是点击任意空白区域隐藏软键盘,而不是点击任意区域隐藏软键盘。当点击软键盘所在区域时,软键盘会消费本次点击事件,产生文字输入;当点击软键盘外的EditText时,EditText会消费本次点击事件,改变输入光标的位置;当点击软键盘外设置了OnClickListener的Button、ImageView时,Button、ImageView会消费本次点击事件,执行相应的OnClick方法。。。所有的这些操作都不会触发Activity中的onTouchEvent(),只有点击到空白区域时,才会触发Activity中的onTouchEvent()。这涉及到TouchEvent的分发机制,关于TouchEvent的分发机制这里就不做介绍了。
相关文章推荐
- android5.1 FrameLayout源码浅析
- Android4.2移植rtl8192cu驱动要点
- Android-Launcher
- android 中所有颜色对应代码
- Android 状态栏消息推送 BroadcastReceiver的使用
- android ListView详解
- 联网查看图片的Demo
- 7.2 android volley超时重试设置
- Android初学之------检查前置摄像头是否存在
- Android开发常见问题之Handler引起的内存泄漏
- Android Service解析
- Android字数限制的EditText实现方案研究
- Android中获取软键盘状态和软键盘高度
- 有道词典
- Android Intent 三解决
- android studio Error:Unable to start the daemon process
- Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or pat
- 如何使用Android Studio把自己的Android library分发到jCenter和Maven Central
- Intent意图常见用法
- Android优化工具SparseArray稀疏数组