import
android.content.Context;
java
import
android.os.Bundle;
android
import
android.os.IBinder;
app
import
android.support.v7.app.AppCompatActivity;
ide
import
android.view.MotionEvent;
this
import
android.view.View;
spa
import
android.view.inputmethod.InputMethodManager;
.net
import
android.widget.EditText;
code
/**
token
* Created by J!nl!n on 15/5/21.
事件
*/
public
abstract
class
BaseActivity
extends
AppCompatActivity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
iniView();
}
public
abstract
void
iniView();
@Override
public
boolean
dispatchTouchEvent(MotionEvent ev) {
if
(ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if
(isShouldHideKeyboard(v, ev)) {
hideKeyboard(v.getWindowToken());
}
}
return
super
.dispatchTouchEvent(ev);
}
/**
* 根據EditText所在座標和用戶點擊的座標相對比,來判斷是否隱藏鍵盤,由於當用戶點擊EditText時則不能隱藏
*
* @param v
* @param event
* @return
*/
private
boolean
isShouldHideKeyboard(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則忽略,這個發生在視圖剛繪製完,第一個焦點不在EditText上,和用戶用軌跡球選擇其餘的焦點
return
false
;
}
/**
* 獲取InputMethodManager,隱藏軟鍵盤
* @param token
*/
private
void
hideKeyboard(IBinder token) {
if
(token !=
null
) {
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
</code>
另外一種方法::::
<code
class
=
"hljs"
java=
""
>
// 點擊空白區域 自動隱藏軟鍵盤
public
boolean
onTouchEvent(MotionEvent event) {
if
(
null
!=
this
.getCurrentFocus()){
/**
* 點擊空白位置 隱藏軟鍵盤
*/
InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
return
mInputMethodManager.hideSoftInputFromWindow(
this
.getCurrentFocus().getWindowToken(),
0
);
}
return
super
.onTouchEvent(event);
}</code>
在須要時手動彈出軟鍵盤
inputContentView.requestFocus();
InputMethodManager m = (InputMethodManager) inputContentView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);