最好的解决办法,我发现是使用如下,
覆盖dispatchTouchEvent()
并尝试使用该caculates 4角落查看(在这里它的EditText)的
Rect
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int x = (int) ev.getX();
int y = (int) ev.getY();
if (ev.getAction() == MotionEvent.ACTION_DOWN &&
!getLocationOnScreen(etFeedback).contains(x, y)) {
InputMethodManager input = (InputMethodManager)
activity.getSystemService(Context.INPUT_METHOD_SERVICE);
input.hideSoftInputFromWindow(etFeedback.getWindowToken(), 0);
}
return super.dispatchTouchEvent(ev);
}
方法得到的EditText
面积
protected Rect getLocationOnScreen(EditText mEditText) {
Rect mRect = new Rect();
int[] location = new int[2];
mEditText.getLocationOnScreen(location);
mRect.left = location[0];
mRect.top = location[1];
mRect.right = location[0] + mEditText.getWidth();
mRect.bottom = location[1] + mEditText.getHeight();
return mRect;
}
通过使用上面的代码,我们可以检测到EditText
的区域,我们可以检查屏幕上的触摸是否是EditText
区域的一部分。如果它的一部分EditText
则不做任何事情让触摸做它的工作,如果触摸不包含EditText
区域,那么只需关闭软键盘。
****** EDIT ******
我才发现,如果我们不希望给任何的EditText作为输入,并希望隐藏键盘整个应用程序中,当用户触摸任何地方的另一种方法除EditText以外的其他。然后,你必须创建一个BaseActivity和写入全球规范,下面隐藏键盘,
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean handleReturn = super.dispatchTouchEvent(ev);
View view = getCurrentFocus();
int x = (int) ev.getX();
int y = (int) ev.getY();
if(view instanceof EditText){
View innerView = getCurrentFocus();
if (ev.getAction() == MotionEvent.ACTION_UP &&
!getLocationOnScreen(innerView).contains(x, y)) {
InputMethodManager input = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
input.hideSoftInputFromWindow(getWindow().getCurrentFocus()
.getWindowToken(), 0);
}
}
return handleReturn;
}
可以请帮问题清楚了吗? – 2012-01-02 04:59:52
我编辑问题。希望它更容易理解。 – Chrishan 2012-01-02 05:10:22
也许是一个重复的问题[这](http://stackoverflow.com/questions/4005728/hide-default-keyboard-on-click-in-android),检查出来 – manuzhang 2012-01-02 05:10:48