点击空白处隐藏软键盘(点击EditText以外的地方隐藏软键盘)

点击空白处隐藏软键盘主要通过以下三步操作完成:

1.判断当前焦点是否在EditText上;

         2.判断用户点击的区域是否在EditText之外;

3.若焦点在EditText上并且点击区域在EditText之外,则将软键盘隐藏。

        了解到以上三点之后,接下来就是具体代码实现。首先,需要找个地方来实施以上三步操作,那么这个地方无疑是dispatchTouchEvent,通过重写dispatchTouchEvent方法来获取用户的触摸操作。

@Override  
public boolean dispatchTouchEvent(MotionEvent ev) {  
Logger.print(TAG, "dispatchTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_DOWN) {  
Logger.print(TAG, "dispatchTouchEvent   MotionEvent.ACTION_DOWN");
// 获得当前得到焦点的View
View v = getCurrentFocus(); 
//如果焦点在edittext上,则隐藏软键盘
if (JudgeHideFostInput.isShouldHideInput(v, ev)) {  
JudgeHideFostInput.hideSoftInput(AppActivity.this,v.getWindowToken());  
}  
}  
return super.dispatchTouchEvent(ev);  
}


接下来,判断当前焦点是否是EditText及触摸区域。
public static boolean isShouldHideInput(View v, MotionEvent event) {  
Logger.print("JudgeHideFostInput", "isShouldHideInput--------------->");
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.getRawY() > top && event.getRawY() < bottom  ) {  
// 点击EditText的事件,忽略它  
return false;  
} else {  
return true;  
}  

}  
return false;  
}  


最后,隐藏软键盘。

public static void hideSoftInput(Activity mActivity,IBinder token) {  
Logger.print("JudgeHideFostInput", "hideSoftInput--------------->");
if (token != null) {  
InputMethodManager im = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);  
im.hideSoftInputFromWindow(token,  
InputMethodManager.HIDE_NOT_ALWAYS);  
}  
}  


点击空白处隐藏软键盘这个功能我也是从网上借鉴而来,当时百度了很多方法,最后的最后就成了我现在用得这个。借鉴的那个大神的,哪部分借鉴的已经不记得了。现将我的思路和我的最终实现方式分享出来,希望对大家有所帮助。

你可能感兴趣的:(Android)