当前位置: 首页 > news >正文

Android点击EditText文本框之外任何地方隐藏键盘的解决办法

1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏

 

[java]  view plain copy
 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:id="@+id/traceroute_rootview"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:background="@color/white"  
  6.     android:clickable="true"  
  7.     android:gravity="center_horizontal"  
  8.     android:orientation="vertical" >  
  9.   
  10. </LinearLayout>  

加上id和clickable=true

 

然后在onCreate里,添加onClick事件的监听:

 

[java]  view plain copy
 
  1. findViewById(R.id.traceroute_rootview).setOnClickListener(this);  

在onClick中:

 

 

[java]  view plain copy
 
  1. @Override  
  2. public void onClick(View v) {  
  3.     switch (v.getId()) {  
  4.     case R.id.traceroute_rootview:  
  5.          InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
  6.          imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
  7.         break;  
  8.     }  
  9.  }  


这样就可以完美的解决了输入框外的隐藏效果,对于布局不是特别复杂或是其它触摸事件少的情况下可以使用。

 

 

2,实现思路二:通过dispatchTouchEvent每次ACTION_DOWN事件中动态判断非EditText本身区域的点击事件,然后在事件中进行屏蔽。

 

[java]  view plain copy
 
  1. @Override  
  2. public boolean dispatchTouchEvent(MotionEvent ev) {  
  3.     if (ev.getAction() == MotionEvent.ACTION_DOWN) {  
  4.         View v = getCurrentFocus();  
  5.         if (isShouldHideInput(v, ev)) {  
  6.   
  7.             InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
  8.             if (imm != null) {  
  9.                 imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
  10.             }  
  11.         }  
  12.         return super.dispatchTouchEvent(ev);  
  13.     }  
  14.     // 必不可少,否则所有的组件都不会有TouchEvent了  
  15.     if (getWindow().superDispatchTouchEvent(ev)) {  
  16.         return true;  
  17.     }  
  18.     return onTouchEvent(ev);  
  19. }  


isShoudHideInput(View v,MotionEvent e)方法:

 

 

[java]  view plain copy
 
  1. public  boolean isShouldHideInput(View v, MotionEvent event) {  
  2.     if (v != null && (v instanceof EditText)) {  
  3.         int[] leftTop = { 0, 0 };  
  4.         //获取输入框当前的location位置  
  5.         v.getLocationInWindow(leftTop);  
  6.         int left = leftTop[0];  
  7.         int top = leftTop[1];  
  8.         int bottom = top + v.getHeight();  
  9.         int right = left + v.getWidth();  
  10.         if (event.getX() > left && event.getX() < right  
  11.                 && event.getY() > top && event.getY() < bottom) {  
  12.             // 点击的是输入框区域,保留点击EditText的事件  
  13.             return false;  
  14.         } else {  
  15.             return true;  
  16.         }  
  17.     }  
  18.     return false;  
  19. }  

这种方法实现起来比较麻烦,解决思路与iOS中的事件分发机制是类似,对于处理隐藏事件比较清晰,通过层层事件分发,然后判断是否在需要屏蔽的区域。

 

 

转自:http://blog.csdn.net/mad1989/article/details/25069821

转载于:https://www.cnblogs.com/longjunhao/p/4217903.html

相关文章:

  • Jquery 调用.net WebService 返回Json、XML方法
  • Silverlight 之 创建
  • hdu 5122 K.Bro Sorting
  • ios编译库文件时出现的问题
  • 给编程一个你热爱它的机会
  • Qt 静态编译后的exe太大, 可以这样压缩.
  • 企业报销系统完整设计方案
  • FBX .NET
  • Struts 1 之配置文件
  • ios判断是否有中文
  • Linux多线程实例练习 - pthread_exit() 与 pthread_join()
  • [简介]HTML5 and CSS3
  • LexYacc Parser错误发生后再次parser之前恢复初始状态
  • ae开发基础功能
  • 水果的英文名称
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  •  D - 粉碎叛乱F - 其他起义
  • Fabric架构演变之路
  • Linux各目录及每个目录的详细介绍
  • Linux后台研发超实用命令总结
  • MySQL数据库运维之数据恢复
  • Next.js之基础概念(二)
  • React-Native - 收藏集 - 掘金
  • 阿里研究院入选中国企业智库系统影响力榜
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 给Prometheus造假数据的方法
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 聊一聊前端的监控
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习笔记TF060:图像语音结合,看图说话
  • !!Dom4j 学习笔记
  • #define、const、typedef的差别
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (算法)Game
  • (算法)前K大的和
  • (五)网络优化与超参数选择--九五小庞
  • (一)u-boot-nand.bin的下载
  • (一)UDP基本编程步骤
  • (原)Matlab的svmtrain和svmclassify
  • (转)程序员疫苗:代码注入
  • (转)原始图像数据和PDF中的图像数据
  • 、写入Shellcode到注册表上线
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net7 环境安装配置
  • .Net多线程总结
  • .Net中间语言BeforeFieldInit
  • [ NOI 2001 ] 食物链
  • [AIGC codze] Kafka 的 rebalance 机制
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [BZOJ3211]:花神游历各国(小清新线段树)