EditText不显示系统键盘,可用来显示自定义的键盘

本文介绍了如何在Android低版本中避免系统键盘弹出与自定义密码键盘冲突的方法,通过`setInputType`、`InputMethodManager`和反射调用API来实现焦点时隐藏系统键盘并显示自定义键盘。
摘要由CSDN通过智能技术生成

系统键盘 包含普通键盘和现在很多ROM定制的密码安全键盘

调用已下方法即可解决:
https://developer.android.google.cn/reference/android/widget/TextView#setShowSoftInputOnFocus(boolean)

但是,此方法是API 21Android 5.0加入的, 所以为了兼容低版本, 建议使用已下方法:

 public static final boolean notShowSoftInput(EditText editText) {
      boolean flag = false;

      InputMethodManager imm = (InputMethodManager) editText.getContext()
              .getSystemService(Context.INPUT_METHOD_SERVICE);
      boolean isOpen = imm.isActive();// isOpen若返回true,则表示输入法打开
      if (isOpen) {
          if (imm.hideSoftInputFromWindow(editText.getWindowToken(), 0))
              flag = true;
      }

//        act.getWindow().setSoftInputMode(
//                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
      int currentVersion = android.os.Build.VERSION.SDK_INT;
      String methodName = null;
      if (currentVersion >= 16) {
          // 4.2
          methodName = "setShowSoftInputOnFocus";
      } else if (currentVersion >= 14) {
          // 4.0
          methodName = "setSoftInputShownOnFocus";
      }

      if (methodName == null) {
          editText.setInputType(InputType.TYPE_NULL);
      } else {
          Class<EditText> cls = EditText.class;
          Method setShowSoftInputOnFocus;
          try {
              setShowSoftInputOnFocus = cls.getMethod(methodName,
                      boolean.class);
              setShowSoftInputOnFocus.setAccessible(true);
              setShowSoftInputOnFocus.invoke(editText, false);
          } catch (NoSuchMethodException e) {
              editText.setInputType(InputType.TYPE_NULL);
              e.printStackTrace();
          } catch (IllegalAccessException e) {
              e.printStackTrace();
          } catch (IllegalArgumentException e) {
              e.printStackTrace();
          } catch (InvocationTargetException e) {
              e.printStackTrace();
          }
      }
      return flag;
  }

4.2低版本中有一个setSoftInputShownOnFocus方法, 但是被声明成hide了, 所以通过反射调用.
再低一点的版本,直接通过setInputType的方式兼容.

以上方法调用后, EditText获取到焦点时,就不会弹出系统的键盘了.
然后弹出自定义的键盘,就可以完美解决冲突了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s_nshine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值