需要实现点击fragment空白的地方来实现隐藏软键盘,首先在其所依附的activity中重写dispatchTouchEvent方法,并提供接口
//点击空白处,隐藏软键盘 回调接口
public interface MyTouchListener {
public void onTouchEvent(MotionEvent event);
}
/*
* 保存MyTouchListener接口的列表
*/
private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<DDLiveBackgroundActivity.MyTouchListener>();
/**
* 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法
*
* @param listener
*/
public void registerMyTouchListener(MyTouchListener listener) {
myTouchListeners.add(listener);
}
/**
* 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法
*
* @param listener
*/
public void unRegisterMyTouchListener(MyTouchListener listener) {
myTouchListeners.remove(listener);
}
/**
* 分发触摸事件给所有注册了MyTouchListener的接口
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean dispatch = super.dispatchTouchEvent(ev);
for (MyTouchListener listener : myTouchListeners) {
listener.onTouchEvent(ev);
}
return dispatch;
}
在fragment的onResume方法中注册
DDLiveBackgroundActivity.MyTouchListener myTouchLinster = new DDLiveBackgroundActivity.MyTouchListener() {
@Override
public void onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (ETSettingH323Fragment.this.getActivity().getCurrentFocus() != null && ETSettingH323Fragment
.this.getActivity().getCurrentFocus().getWindowToken() != null) {
InputMethodManager manager = (InputMethodManager) ETSettingH323Fragment.this.getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
manager.hideSoftInputFromWindow(ETSettingH323Fragment.this.getActivity().getCurrentFocus()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
};
((DDLiveBackgroundActivity) this.getActivity()).registerMyTouchListener(myTouchLinster);
记得在fragment的onPause方法中取消注册
if (myTouchLinster != null) {
((DDLiveBackgroundActivity) this.getActivity()).unRegisterMyTouchListener(myTouchLinster);
myTouchLinster = null;
}