×

关于EditText的软键盘弹出处理问题

96
酸菜xwdz
2016.08.05 19:59* 字数 51

最近公司做项目遇到EditText碰见软键盘自动弹出的问题搞的笔者头疼不已情况如下,不过好在已经解决

    1.进入到activity之后自动弹出软键盘,但其实那个activity是没有editText控件的
    2. 在有editText控件的情况下想关控件的小键盘关不了;

好了进入正题;

    1.首先如果你需要进入某个Activity就需要把软键盘关掉,在清单文件加入以下即可:
      android:windowSoftInputMode="stateHidden"  
      原因是editText 会自动获取焦点,或者你调用editText.clearfocus()即可;

    2.像类似的:微信支付, 支付宝支付,都差不多要用小键盘自动弹出弹出或者是点击editText控件弹出小键盘;
      自动弹出键盘可以时间一个定时器来做代码实现该需求,代码如下:
      在清单文件添加:
      android:windowSoftInputMode="adjustResize"
// 定义一个定时器100ms之后打开键盘
  new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
  
                // 如果在自动弹出的状态下 以下代码隐藏
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
                imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
            }
        },100);

   //但是笔者在项目中以上代码会失效! 清除焦点还是会失效最后通过反射代码如下:
  public void setKeyPad(EditText editText) {
        if (android.os.Build.VERSION.SDK_INT <= 10) {
            editText.setInputType(InputType.TYPE_NULL);
        } else {
            getWindow().setSoftInputMode(
                    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            try {
                Class<EditText> cls = EditText.class;
                Method setShowSoftInputOnFocus;
                setShowSoftInputOnFocus = cls.getMethod(
                        "setShowSoftInputOnFocus", boolean.class);
                setShowSoftInputOnFocus.setAccessible(true);
                setShowSoftInputOnFocus.invoke(editText, false);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Android
Web note ad 1