Android中关于键盘管理,点击除editText外的区域收起键盘
借鉴这位大神的:http://blog.csdn.net/qibin0506
代码如下:
/**
* Created by xiaoMan on 2016/11/22.
* Email:1635401972@qq.com
* Details:
*/
public class AutoHideIMEFrameLayout extends FrameLayout {
public AutoHideIMEFrameLayout(Context context) {
super(context);
}
public AutoHideIMEFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AutoHideIMEFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
Context context = getContext();
if (context == null || !(context instanceof Activity)) {
return super.dispatchTouchEvent(ev);
}
Activity activity = (Activity) context;
View focusView = activity.getCurrentFocus();
if (focusView != null && shouldHideInputMethod(focusView, ev)) {
hideInputMethod(focusView);
}
}
return super.dispatchTouchEvent(ev);
}
private boolean shouldHideInputMethod(View focusView, MotionEvent event) {
Rect rect = new Rect();
focusView.getHitRect(rect);
return !rect.contains((int) event.getX(), (int) event.getY());
}
private void hideInputMethod(View currentFocus) {
if (currentFocus == null) {
return;
}
InputMethodManager imm = (InputMethodManager) currentFocus.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
2
/**
* Created by xiaoMan on 2016/11/22.
* Email:1635401972@qq.com
* Details:
*/
public class HideIMEUtil {
public static void wrap(Activity activity) {
ViewGroup contentParent = (ViewGroup) activity.findViewById(android.R.id.content);
wrap(contentParent);
}
public static void wrap(Fragment fragment) {
ViewGroup contentParent = (ViewGroup) fragment.getView().getParent();
wrap(contentParent);
}
public static void wrap(ViewGroup contentParent) {
View content = contentParent.getChildAt(0);
contentParent.removeView(content);
ViewGroup.LayoutParams p = content.getLayoutParams();
AutoHideIMEFrameLayout layout = new AutoHideIMEFrameLayout(content.getContext());
layout.addView(content);
contentParent.addView(layout, new ViewGroup.LayoutParams(p.width, p.height));
}
}
3.使用的时候只需:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppManager.getAppManager().addActivity(this);
setContentView(R.layout.activity_set_email_layout);
HideIMEUtil.wrap(this);//键盘管理,点击除editText外区域收起键盘
initView();
setTopView();
}