content: package com.rsen.github.androidutilcode;
  
  import android.app.Activity;
  import android.content.Context;
  import android.util.Log;
  import android.view.View;
  import android.view.inputmethod.InputMethodManager;
  import android.widget.EditText;
  
  /**
   * <pre>
   *     author: Blankj
   *     blog  : http://blankj.com
   *     time  : 2016/8/2
   *     desc  : 键盘相关工具类
   * </pre>
   */
  public class KeyboardUtils {
  
      private KeyboardUtils() {
          throw new UnsupportedOperationException("u can't instantiate me...");
      }
  
      /**
       * 避免输入法面板遮挡
       * <p>在manifest.xml中activity中设置</p>
       * <p>android:windowSoftInputMode="adjustResize"</p>
       */
  
      /**
       * 动态隐藏软键盘
       *
       * @param activity activity
       */
      public static void hideSoftInput(Activity activity) {
          View view = activity.getCurrentFocus();
          if (view == null) {
              view = new View(activity);
          }
          InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
          imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
      }
  
      /**
       * 点击屏幕空白区域隐藏软键盘（方法2）
       * <p>根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘</p>
       * <p>需重写dispatchTouchEvent</p>
       * <p>参照以下注释代码</p>
       */
      public static void clickBlankArea2HideSoftInput() {
          Log.d("tips", "U should copy the following code.");
          /*
          @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所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘
          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();
                  return !(event.getX() > left && event.getX() < right
                          && event.getY() > top && event.getY() < bottom);
              }
              return false;
          }
  
          // 获取InputMethodManager，隐藏软键盘
          private void hideKeyboard(IBinder token) {
              if (token != null) {
                  InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                  im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
              }
          }
          */
      }
  
      /**
       * 动态显示软键盘
       *
       * @param context 上下文
       * @param edit    输入框
       */
      public static void showSoftInput(Context context, EditText edit) {
          edit.setFocusable(true);
          edit.setFocusableInTouchMode(true);
          edit.requestFocus();
          InputMethodManager imm = (InputMethodManager) context
                  .getSystemService(Context.INPUT_METHOD_SERVICE);
          imm.showSoftInput(edit, 0);
      }
  
      /**
       * 切换键盘显示与否状态
       *
       * @param context 上下文
       */
      public static void toggleSoftInput(Context context) {
          InputMethodManager imm = (InputMethodManager) context
                  .getSystemService(Context.INPUT_METHOD_SERVICE);
          imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
      }
  
      /**
       * 判断键盘是否显示
       *
       * @param context 上下文
       * @return {@code true}: 显示<br>{@code false}: 不显示
       */
      public static boolean isShowSoftInput(Context context) {
          return ((InputMethodManager) context
                  .getSystemService(Context.INPUT_METHOD_SERVICE)).isActive();
      }
  }
  