1,实现方法一:

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

android:id="@+id/traceroute_rootview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@color/white"

android:clickable="true"

android:gravity="center_horizontal"

android:orientation="vertical" >

加上id和clickable=true

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

findViewById(R.id.traceroute_rootview).setOnClickListener(this);

在onClick中:

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.traceroute_rootview:

InputMethodManager imm = (InputMethodManager)

getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

break;

}

}

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

2,实现思路二:

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

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

if (ev.getAction() == MotionEvent.ACTION_DOWN) {

View v = getCurrentFocus();

if (isShouldHideInput(v, ev)) {

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm != null) {

imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

}

}

return super.dispatchTouchEvent(ev);

}

// 必不可少,否则所有的组件都不会有TouchEvent了

if (getWindow().superDispatchTouchEvent(ev)) {

return true;

}

return onTouchEvent(ev);

}

isShoudHideInput(View v,MotionEvent e)方法:

public boolean isShouldHideInput(View v, MotionEvent event) {

if (v != null && (v instanceof EditText)) {

int[] leftTop = { 0, 0 };

//获取输入框当前的location位置

v.getLocationInWindow(leftTop);

int left = leftTop[0];

int top = leftTop[1];

int bottom = top + v.getHeight();

int right = left + v.getWidth();

if (event.getX() > left && event.getX() < right

&& event.getY() > top && event.getY() < bottom) {

// 点击的是输入框区域,保留点击EditText的事件

return false;

} else {

return true;

}

}

return false;

}

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

1,实现方法一:

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

android:id="@+id/traceroute_rootview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@color/white"

android:clickable="true"

android:gravity="center_horizontal"

android:orientation="vertical" >

加上id和clickable=true

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

findViewById(R.id.traceroute_rootview).setOnClickListener(this);

在onClick中:

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.traceroute_rootview:

InputMethodManager imm = (InputMethodManager)

getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

break;

}

}

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

2,实现思路二:

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

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

if (ev.getAction() == MotionEvent.ACTION_DOWN) {

View v = getCurrentFocus();

if (isShouldHideInput(v, ev)) {

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm != null) {

imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

}

}

return super.dispatchTouchEvent(ev);

}

// 必不可少,否则所有的组件都不会有TouchEvent了

if (getWindow().superDispatchTouchEvent(ev)) {

return true;

}

return onTouchEvent(ev);

}

isShoudHideInput(View v,MotionEvent e)方法:

public boolean isShouldHideInput(View v, MotionEvent event) {

if (v != null && (v instanceof EditText)) {

int[] leftTop = { 0, 0 };

//获取输入框当前的location位置

v.getLocationInWindow(leftTop);

int left = leftTop[0];

int top = leftTop[1];

int bottom = top + v.getHeight();

int right = left + v.getWidth();

if (event.getX() > left && event.getX() < right

&& event.getY() > top && event.getY() < bottom) {

// 点击的是输入框区域,保留点击EditText的事件

return false;

} else {

return true;

}

}

return false;

}

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

以上所述是小编给大家介绍的Android点击EditText文本框之外任何地方隐藏键盘的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对找一找教程网网站的支持!

android 点击文本框 不调用键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...相关推荐

  1. android+点击屏幕隐藏键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...

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

  2. 点击屏幕上EditText区域以外的任何地方隐藏键盘的解决方法

    解决思路与iOS中的事件分发机制是类似的,这是Activity.class中的事件分发函数: (1)下面的函数可以处理所有的点击事件,但是要注意到不能无故拦截. /*** Called to proc ...

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

    通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android="http ...

  4. 微信小程序:想要点击图片时进行一个放大的功能,写完之后可以正常显示,但点击时图片加载不出来,在此想问一下各路大神有没有解决办法

    微信小程序:想要点击图片时进行一个放大的功能,写完之后可以正常显示,但点击时图片加载不出来,在此想问一下各路大神有没有解决办法 wxml: 在这里插入代码片 <view class='zhanp ...

  5. Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法

    错误: Not sure how to convert a Cursor to this method's return type 最近在使用Room+协程+LiveData查询数据的时候,我的查询方 ...

  6. VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误...

    1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...

  7. android 杀进程推送服务,关于APP进程被杀死,极光推送收不到消息的解决办法

    推送是每一个APP必不可少的一部分,这几天正好在做这一块,所以总结一下遇到的一些问题.在APP被杀死的情况下,对应的推送service也一起被杀死了,这个时候我们怎么能够收到后台的推送呢? 解决办法很 ...

  8. js点击元素之外的地方隐藏该元素

    有时候我们会有这种情况,点击按钮(或者指定元素)显示一个菜单栏,点击按钮和菜单栏外的区域隐藏菜单栏: 主要运用阻止事件冒泡来实现:下面是全部代码: <!DOCTYPE html> < ...

  9. python调用cmd命令会弹出黑框_python 调用cmd,不显示cmd黑框

    python 调用系统命令的方式有很多 1.1   os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态.这实际上是使用C标准 ...

  10. Android 调用.so包时报错:UnsatisfiedLinkError: No implementation found for XXX 时的解决办法

    环境 Android Studio 3.5 问题描述 使用可以正常运行的Demo中的module, 其中调用了第三方so文件.运行报错: java.lang.UnsatisfiedLinkError: ...

最新文章

  1. 智能家居隐私问题再遭热议:涉案设备中的数据究竟受不受保护?
  2. ai入门视频,亲测有效
  3. idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!
  4. python基础-元组
  5. Greenplum segment级问题的排查 - gp_session_role=utility (含csvlog日志格式解读)
  6. 程序员的量化交易之路(17)--Cointrader之Temporal实体(5)
  7. ie浏览器在线使用_关于登录深圳市住房公积金管理中心网站在线办理平台的温馨提示...
  8. @transactional可以用在controller层吗_Spring还可以这样用缓存,你知道吗?
  9. java中cplex程序_Cplex中文教程全 PDF 下载
  10. 90后最流行的英文名
  11. caj转成Word文件是怎么转换的
  12. 基于K-Means聚类算法对NBA球员数据的聚类分析
  13. 使用对比学习处理大规模多模态单细胞数据
  14. 星梦小组KTV点歌系统简介
  15. adobe flash player已过期
  16. 地址解析 收货地址智能解析 已上传到Gitee上
  17. 如何使用JavaScript检查数字是否为素数?
  18. 【异构图神经网络】HGraph || 附:AI研究生时间规划 建议(研一、研二、研三)
  19. 1588分析和实现总纲
  20. DNS服务(三):域名解析he域名迁徙

热门文章

  1. NPM ----快速删除node_modules
  2. 捕捉异常_Python通过try....except...else捕捉和处理异常
  3. c语言乘法除法结合律,有关C语言运算符优先级和结合律的思考
  4. mysql命令 -a_mysql常用命令
  5. DOS 下修改ip 地址
  6. 不兼容惹的祸,Calibre 作者拒绝迁移至 Python 3
  7. 09、多线程(一) -- 基本概念
  8. Java 8 你需要掌握的新特性
  9. 调研时报表的相关信息
  10. 分享一个帮助你有效避免SQL Injection攻击的在线手册 - bbobby-tables.com