Android 自用键盘操作
/** * 软键盘操作类 * 功能描述: * 1、打开软键盘 showSoftInput(EditText,Activity) or showSoftInput(Activity); * 2、关闭软键盘 closeSoftInput(EditText,Activity) or closeSoftInput(Activity); * Created by tab on 2018/05/04 14:10 */ public class KeyBoardUtils { /** * 打开软键盘 * * @param mEditText 输入框 * @param mContext 上下文 */ public static void showSoftInput(EditText mEditText, Context mContext) { InputMethodManager imm = (InputMethodManager) mContext .getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); } /** * 关闭软键盘 * * @param mEditText 输入框 * @param mContext 上下文 */ public static void closeSoftInput(EditText mEditText, Context mContext) { InputMethodManager imm = (InputMethodManager) mContext .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); } /** * 打开键盘. * * @param context the context */ public static void showSoftInput(Context context) { InputMethodManager inputMethodManager = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } /** * 关闭键盘事件. * * @param context the context */ public static void closeSoftInput(Context context) { InputMethodManager inputMethodManager = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager != null && ((Activity) context).getCurrentFocus() != null) { inputMethodManager.hideSoftInputFromWindow(((Activity) context).getCurrentFocus() .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } static int virtualKeyboardHeight; static int screenHeight; static int screenHeight6; static View rootView; /** * @param listener */ public static void setOnKeyboardChangeListener(Activity mContext, final KeyboardChangeListener listener) { screenHeight = mContext.getResources().getDisplayMetrics().heightPixels; screenHeight6 = screenHeight / 6; rootView = mContext.getWindow().getDecorView(); rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { //当键盘弹出隐藏的时候会 调用此方法。 @Override public void onGlobalLayout() { //回调该方法时rootView还未绘制,需要设置绘制完成监听 rootView.post(new Runnable() { @Override public void run() { Rect rect = new Rect(); //获取屏幕底部坐标 rootView.getWindowVisibleDisplayFrame(rect); //获取键盘的高度 int heightDifference = screenHeight - rect.bottom; if (heightDifference < screenHeight6) { virtualKeyboardHeight = heightDifference; if (listener != null) { listener.onKeyboardHide(); } } else { if (listener != null) { listener.onKeyboardShow(heightDifference - virtualKeyboardHeight); } } } }); } }); } /** * 软键盘状态切换监听 */ public interface KeyboardChangeListener { /** * 键盘弹出 * * @param keyboardHight 键盘高度 */ void onKeyboardShow(int keyboardHight); /** * 键盘隐藏 */ void onKeyboardHide(); } }