解决方案 »
- 刚开始学android,照着书上例子做出现错误,不懂,代码贴出来高手指教下
- android 4.0.x 如何启动无法接收广播的程序
- 高优先级的对话框。。。
- android 无法执行基本的linux命令怎么解决?
- Android—为什么从麦克风中采集的数据具有很大的噪音?
- android屏幕上绘图问题,亟待高手解决!!
- 请教一个输入框的问题
- 异常来袭!!! java.lang.NullPointerException!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 谁能帮我自定义一个RadioButton Preference
- 关于UI界面问题,同时使用横屏UI和竖屏UI
- android 源码:AsyncTask执行多线程
- 求当android sdk manager 没有办法用时的替代解决方法
* 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
*
* @param v
* @param event
* @return
*/
public static 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 {
// hideSoftInput(v.getWindowToken());
return true;
}
}
// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
} /**
* 多种隐藏软件盘方法的其中一种
*
* @param token
*/
public static void hideSoftInput(IBinder token, InputMethodManager im) {
if (token != null) {
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}上面2个方法贴到公用类。
在要用到的activity覆盖下面方法即可。
/**
* 隐藏软键盘
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
if (ev.getAction() == MotionEvent.ACTION_DOWN) { // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus(); if (DevilUtil.isShouldHideInput(v, ev)) {
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
DevilUtil.hideSoftInput(v.getWindowToken(), im);
}
}
return super.dispatchTouchEvent(ev);
}
* 隐藏软键盘
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus();
if (DevilUtil.isShouldHideInput(v, ev)) {
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
DevilUtil.hideSoftInput(v.getWindowToken(), im);
}
}
return super.dispatchTouchEvent(ev);
}。不是就是这个嘛,我都贴给你了啊。只在父类实现就可以了。子类不用任何操作。