android 点击文本框 不调用键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...
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文本框之外任何地方隐藏键盘的解决办法...相关推荐
- android+点击屏幕隐藏键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...
1,实现方法一: 通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 android:id="@+id/traceroute ...
- 点击屏幕上EditText区域以外的任何地方隐藏键盘的解决方法
解决思路与iOS中的事件分发机制是类似的,这是Activity.class中的事件分发函数: (1)下面的函数可以处理所有的点击事件,但是要注意到不能无故拦截. /*** Called to proc ...
- Android点击EditText文本框之外任何地方隐藏键盘的解决办法
通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android="http ...
- 微信小程序:想要点击图片时进行一个放大的功能,写完之后可以正常显示,但点击时图片加载不出来,在此想问一下各路大神有没有解决办法
微信小程序:想要点击图片时进行一个放大的功能,写完之后可以正常显示,但点击时图片加载不出来,在此想问一下各路大神有没有解决办法 wxml: 在这里插入代码片 <view class='zhanp ...
- 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查询数据的时候,我的查询方 ...
- VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误...
1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...
- android 杀进程推送服务,关于APP进程被杀死,极光推送收不到消息的解决办法
推送是每一个APP必不可少的一部分,这几天正好在做这一块,所以总结一下遇到的一些问题.在APP被杀死的情况下,对应的推送service也一起被杀死了,这个时候我们怎么能够收到后台的推送呢? 解决办法很 ...
- js点击元素之外的地方隐藏该元素
有时候我们会有这种情况,点击按钮(或者指定元素)显示一个菜单栏,点击按钮和菜单栏外的区域隐藏菜单栏: 主要运用阻止事件冒泡来实现:下面是全部代码: <!DOCTYPE html> < ...
- python调用cmd命令会弹出黑框_python 调用cmd,不显示cmd黑框
python 调用系统命令的方式有很多 1.1 os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态.这实际上是使用C标准 ...
- Android 调用.so包时报错:UnsatisfiedLinkError: No implementation found for XXX 时的解决办法
环境 Android Studio 3.5 问题描述 使用可以正常运行的Demo中的module, 其中调用了第三方so文件.运行报错: java.lang.UnsatisfiedLinkError: ...
最新文章
- 智能家居隐私问题再遭热议:涉案设备中的数据究竟受不受保护?
- ai入门视频,亲测有效
- idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!
- python基础-元组
- Greenplum segment级问题的排查 - gp_session_role=utility (含csvlog日志格式解读)
- 程序员的量化交易之路(17)--Cointrader之Temporal实体(5)
- ie浏览器在线使用_关于登录深圳市住房公积金管理中心网站在线办理平台的温馨提示...
- @transactional可以用在controller层吗_Spring还可以这样用缓存,你知道吗?
- java中cplex程序_Cplex中文教程全 PDF 下载
- 90后最流行的英文名
- caj转成Word文件是怎么转换的
- 基于K-Means聚类算法对NBA球员数据的聚类分析
- 使用对比学习处理大规模多模态单细胞数据
- 星梦小组KTV点歌系统简介
- adobe flash player已过期
- 地址解析 收货地址智能解析 已上传到Gitee上
- 如何使用JavaScript检查数字是否为素数?
- 【异构图神经网络】HGraph || 附:AI研究生时间规划 建议(研一、研二、研三)
- 1588分析和实现总纲
- DNS服务(三):域名解析he域名迁徙
热门文章
- NPM ----快速删除node_modules
- 捕捉异常_Python通过try....except...else捕捉和处理异常
- c语言乘法除法结合律,有关C语言运算符优先级和结合律的思考
- mysql命令 -a_mysql常用命令
- DOS 下修改ip 地址
- 不兼容惹的祸,Calibre 作者拒绝迁移至 Python 3
- 09、多线程(一) -- 基本概念
- Java 8 你需要掌握的新特性
- 调研时报表的相关信息
- 分享一个帮助你有效避免SQL Injection攻击的在线手册 - bbobby-tables.com