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

分类:Android 9725人阅读 评论(8) 收藏 举报 空白区域输入框屏蔽 EditText 隐藏键盘



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

[java] view plain copy
  1. <LinearLayoutxmlns: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. </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. publicvoidonClick(Viewv){
  3. switch(v.getId()){
  4. caseR.id.traceroute_rootview:
  5. InputMethodManagerimm=(InputMethodManager)
  6. getSystemService(Context.INPUT_METHOD_SERVICE);
  7. imm.hideSoftInputFromWindow(v.getWindowToken(),0);
  8. break;
  9. }
  10. }

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


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

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

isShoudHideInput(View v,MotionEvent e)方法:

[java] view plain copy
  1. publicbooleanisShouldHideInput(Viewv,MotionEventevent){
  2. if(v!=null&&(vinstanceofEditText)){
  3. int[]leftTop={0,0};
  4. //获取输入框当前的location位置
  5. v.getLocationInWindow(leftTop);
  6. intleft=leftTop[0];
  7. inttop=leftTop[1];
  8. intbottom=top+v.getHeight();
  9. intright=left+v.getWidth();
  10. if(event.getX()>left&&event.getX()<right
  11. &&event.getY()>top&&event.getY()<bottom){
  12. //点击的是输入框区域,保留点击EditText的事件
  13. returnfalse;
  14. }else{
  15. returntrue;
  16. }
  17. }
  18. returnfalse;
  19. }
这种方法实现起来比较麻烦,解决思路与iOS中的事件分发机制是类似,对于处理隐藏事件比较清晰,通过层层事件分发,然后判断是否在需要屏蔽的区域。



版权声明:本文为博主原创文章,未经博主允许不得转载。

更多相关文章

  1. Android(安卓)计步传感器的实现
  2. Android监听事件四种方法
  3. Android中SlidingDrawer介绍【安卓进化三十四】
  4. android事件拦截处理机制详解
  5. Android中的Menu功能菜单-OptionsMenu[选项菜单]
  6. Android应用程序键盘(Keyboard)消息处理机制分析
  7. React Native嵌入到Android原生应用中、组件的生命周期、颜色、
  8. Android四种点击事件方法
  9. android去掉button默认的点击阴影

随机推荐

  1. 如何检索Android设备的唯一ID
  2. (Android实战系统二)Android网络互动传输
  3. 开发者大会传递信号:Android开发者将越来
  4. 安卓Android开发视频教程大全50GB/安卓基
  5. (转)Android内存管理机制之一:lowmemory k
  6. Android(安卓)Studio 使用jni
  7. android自定义adapter 滑动屏幕时 进度条
  8. ionic 中切换平台以实现android中使用的
  9. Android工程 引用另外一个Android工程
  10. 微软一年通过Android获得几十亿美元收入,