安卓editview点击时打开软键盘,点击其他地方软键盘消失(Activity中)
2016-10-20 11:35
330 查看
一、在activity中
activity中使用事件分发:
1、根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
private boolean isShouldHideInput(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则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
}
2、隐藏软键盘
private void hideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
3、在dispatchTouchEvent中处理事件
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
hideSoftInput(v.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);
}
activity中使用事件分发:
1、根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
private boolean isShouldHideInput(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则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
}
2、隐藏软键盘
private void hideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
3、在dispatchTouchEvent中处理事件
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
hideSoftInput(v.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);
}
相关文章推荐
- 安卓editview点击时打开软键盘,点击其他地方软键盘消失(fragment中)
- 点击屏幕其他地方让软键盘消失
- 关于安卓alertdialog你能用到的都在这里了(进出动画,显示位置,背景,设置内容,是否可以点击其他地方消失,屏幕不变暗)
- 打开关闭软键盘,点击屏幕其他地方关闭软键盘
- android在打开activity时如何防止edittext获取焦点弹出软键盘
- Android工作笔记_点击EditText以外的地方关闭软键盘的方法
- 点击EditText可编辑,点击其他地方不可编辑
- 安卓一个Activity里面写好内容跳到另外一个Activity选择文件之后回来,其他内容消失解决办法
- 点击页面其他地方取消EditText的焦点并且隐藏软键盘的方法
- 高德地图infowindow点击其他地方消失
- webView点击打开其他的页面iOS
- Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)
- 重写dispatchTouchEvent方法,实现EditText失去焦点后(点击其他地方)收起键盘的效果
- 关于Edittext点击弹出软键盘,布局上移标题消失问题,微信聊天界面
- 高德地图infowindow点击其他地方消失
- Dialog点击屏幕其他地方消失的事件
- 点击其他地方弹层消失
- Android 通过点击EditText之外的地方隐藏软键盘
- Edittext打开键盘界面不变形和点击空白收起软键盘
- EditText默认无法获取焦点,必须点击一次才能获取焦点打开软键盘的解决办法