天天看点

自定义小键盘

      最近项目改进 ---- 屏蔽Android系统自带输入键盘,添加自定义键盘,首先声明是Android系统车载上面,,开发虽然是基于Android系统,但是底层是改过的,并不是全依靠原生,我们是有一个Jar包 的

     现象:  之前使用系统输入法,10%概率出现,点击Edittext,系统不能及时弹出键盘,    退出Activity ,重新进入才能正常输入,用户体验差

     自定义键盘一般逻辑

第一步

要屏蔽掉系统输入法

代码:

// deviceName_et.setInputType(InputType.TYPE_NULL);
           

第二步:

new KeyboardUtil(act, ctx, deviceName_et).showKeyboard();  //自定义键盘show 出来


自定义键盘View没多大的套路,请自己找资源
           

然后点击时自定义键盘跳出来了,仔细一看,edittext焦点获取到了, 但是没光标啊 (附图) , 键盘可以正常出现/消失键盘 , but ,键盘消失了, 焦点没有消失啊,这些现象都可以通过打Log和通过设置edittext中  text的颜色变化

好,OK,找资料

可以通过反射把光标显示出来

反射代码:

private void setMyInputType() {

        if (android.os.Build.VERSION.SDK_INT <= 10) {
            deviceName_et.setInputType(InputType.TYPE_NULL);
        } else {
            getWindow().setSoftInputMode(
                    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            try {
                Class<EditText> cls = EditText.class;
                Method method = cls.getMethod(
                        "setShowSoftInputOnFocus", boolean.class);
                method.setAccessible(false);
                method.invoke(deviceName_et, false);

            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();

              /*  try {
                    Class<EditText> cls = EditText.class;
                    Method setShowSoftInputOnFocus;
                    setShowSoftInputOnFocus = cls.getMethod(
                            "setShowSoftInputOnFocus", boolean.class);
                    setShowSoftInputOnFocus.setAccessible(true);
                    setShowSoftInputOnFocus.invoke(deviceName_et, false);
                } catch (Exception e) {
                    e.printStackTrace();
                }*/
            }
        }
        Log.d(TAG, "setMyInputType: 走完");
    }

}
           

发现:

光标还是没有

好尴尬   !!!!!!   别人博客就是这么做的啊!!

咋整

OK  其实第一步问题出在第一步

不用,注释掉

然后走反射

可以了,焦点和自定义键盘能同步出现/消失

如果你也遇到了这种情况,试着用这种步骤,应该可以解决