키보드 내려갈 때 특정 처리 하기
키보드 내려갈 때 포커스 클리어 처리 하기
키보드 보여주기 및 포커스 , 숨기기 및 포커스 클리어 function
public static void showKeyboard(EditText editText) {
if (editText == null) {
return;
}
editText.requestFocus();
mInputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_FORCED | InputMethodManager.HIDE_IMPLICIT_ONLY);
}
public static void clearFocus(Activity activity) {
View v = activity.getCurrentFocus();
if (v == null) {
return;
}
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
v.clearFocus();
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
키보드 내려갈 때 감지 해서 특정한 처리가 필요 했다.
editText에서 지원 되는 키보드 감지 리스너는 보이지 않아서 따로 구현이 필요 했다.
int lastHeightDiff = 0;
boolean isOpenKeyboard = false;
private final ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
synchronized public void onGlobalLayout() {
View activityRootView = mActivity.getWindow().getDecorView().findViewById(android.R.id.content);
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (lastHeightDiff == 0) {
lastHeightDiff = heightDiff;
}
if (heightDiff > lastHeightDiff) { //keyboard show
isOpenKeyboard = true;
} else {//keyboard hide
if (isOpenKeyboard) {
clearFocus();
isOpenKeyboard = false;
}
}
}
};
해당 리스너는 onCreate 시 등록 onDestroy 해제 시켜줘야 한다.
한번 불리는게 아니라 여러번 불리기 때문에 isOpenKeyboard 를 사용해서 clearFocus 처리를 해주었다.