Android点击空白区域,隐藏输入法软键盘
2015-05-21 16:17
459 查看
很多时候,我们在使用应用时,会出现输入法软键盘弹出的问题,通常情况下,我们默认会使用户点击返回键或者下一步对软键盘进行隐藏。为了更好的体验,我们可以实现当用户使用完毕软键盘时。点击空白区域即可实现隐藏的功能。效果如图所示:
![](http://img.blog.csdn.net/20150521160640354)
当然我们还有更加简单的方法来实现该功能,只需要重写onTouchEvent方法即可。代码如下:
使用一个BaseActivity进行一些处理公共操作,其他Activity均继承自该基类Activity即可,则所有界面均可实现点击空白区域,隐藏软键盘。
示例代码下载
代码实现
package example.com.jinlin.myapplication; import android.content.Context; import android.os.Bundle; import android.os.IBinder; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; /** * Created by J!nl!n on 15/5/21. */ public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); iniView(); } public abstract void iniView(); @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, ev)) { hideKeyboard(v.getWindowToken()); } } return super.dispatchTouchEvent(ev); } /** * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏 * * @param v * @param event * @return */ private boolean isShouldHideKeyboard(View v, MotionEvent event) { 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 (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 点击EditText的事件,忽略它。 return false; } else { return true; } } // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点 return false; } /** * 获取InputMethodManager,隐藏软键盘 * @param token */ private void hideKeyboard(IBinder token) { if (token != null) { InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } } }
当然我们还有更加简单的方法来实现该功能,只需要重写onTouchEvent方法即可。代码如下:
// 点击空白区域 自动隐藏软键盘 public boolean onTouchEvent(MotionEvent event) { if(null != this.getCurrentFocus()){ /** * 点击空白位置 隐藏软键盘 */ InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0); } return super .onTouchEvent(event); }
使用一个BaseActivity进行一些处理公共操作,其他Activity均继承自该基类Activity即可,则所有界面均可实现点击空白区域,隐藏软键盘。
示例代码下载
相关文章推荐
- 【转】Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android 点击空白区域 隐藏输入法 软键盘
- 安卓学习笔记---Android点击空白区域,隐藏输入法软键盘
- android 监听软键盘弹起和关闭状态与点击空白区域软键盘隐藏
- Android中点击空白位置隐藏软键盘
- Android 点击屏幕空白处收起输入法软键盘(手动打开)
- android listview 点击空白区域 软键盘消失
- android朋友圈监听键盘状态 点击空白区域隐藏键盘
- Android中点击空白区域控件自动隐藏(事件传递机制中的一个小例子)
- android listview 点击空白区域 软键盘消失
- android 点击空白隐藏软键盘
- Android 点击空白区域 软键盘消失
- Android中点击空白区域控件自动隐藏(事件传递机制中的一个小例子)
- Android中单击空白区域隐藏键盘
- IOS点击键盘以外空白区域隐藏键盘的4种常见写法
- IOS 单指点击空白区域隐藏键盘(贴项目中的代码,未整理)UITapGestureRecognizer