最近项目改进 ---- 屏蔽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 其实第一步问题出在第一步
不用,注释掉
然后走反射
可以了,焦点和自定义键盘能同步出现/消失
如果你也遇到了这种情况,试着用这种步骤,应该可以解决