Android 点击空白处自动隐藏输入法
2015-11-05 14:42
330 查看
[代码] [Java]代码
方法1: 简单但有时会无效
方法2: 完美适用activity与fragment
使用一个BaseActivity进行一些处理公共操作,其他Activity均继承自该基类Activity即可,则所有界面均可实现点击空白区域,隐藏软键盘。
方法1: 简单但有时会无效
[code]InputMethodManager manager= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_DOWN){ if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){ manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } return super.onTouchEvent(event); }
方法2: 完美适用activity与fragment
[code]import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.IBinder; 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 class AppCompatActivity extends Activity{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //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); } } }
使用一个BaseActivity进行一些处理公共操作,其他Activity均继承自该基类Activity即可,则所有界面均可实现点击空白区域,隐藏软键盘。
相关文章推荐
- Android入门----Switch控件
- Android应用程序与SurfaceFlinger服务的关系概述和学习计划
- android中出现support中引用的类找不到
- Android学习路线
- Android 系统状态栏一体化
- Android 屏幕适配详解
- Android 应用的自动升级、更新模块的实现
- Android笔记整理之常见错误及解决方案汇总
- Android根据资源文件名获取它的资源ID 的两种方式
- Android OOM:内存管理分析和内存泄露原因总结
- Android之xml
- 开源中国 OsChina Android 客户端源码分析(11)缓存对象
- Android中字体加粗
- Android屏幕适配全攻略(最权威的官方适配指导)
- Android学习--GridView的使用
- Android系列教程之Activity的生命周期
- Android中的数据存储的五种方式
- 【Android4高级编程】(1)创建应用程序和Activity
- Android开发之onClick事件的三种写法
- 【Android开发笔记】pulltorefresh实现下拉刷新和上拉加载更多