Android(安卓)隐藏软键盘的方式
16lz
2021-01-26
最近用到需要自己写一个输入的界面,这就需要隐藏掉系统默认的输入法弹出来了。
要隐藏输入法,有几种方式:
- 在AndroidManifest中声明Activity的输入模式,详情请看http://blog.csdn.net/u012943767/article/details/48932389
- 在代码中设置
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
ideSoftInputFromWindow(view.getWindowToken(), 0);
其中View 为当前获取焦点弹出软件盘的View
上面2中方法只是执行一个就隐藏一次系统的输入法,当EditText获取焦点之后还是会调出来的。但是笔者需要实现的是EditText获取焦点的时候不弹出来,输入的时候也不弹出来,后来发现EditText中有一个方法setShowSoftInputOnFocus
但是该方法是隐藏的。但是该方法实在2.3以后的SDK才出现的,如果要兼容2.3版本,只需要调用:et.setInputType(InputType.TYPE_NULL)
,回到正常情况下,我们需要用到反射来调用setShowSoftInputOnFocus
,代码如下:
Class cls = EditText.class;Method setSoftInputShownOnFocus;setSoftInputShownOnFocus = cls.getMethod(methodName,boolean.class);setSoftInputShownOnFocus.setAccessible(true);setSoftInputShownOnFocus.invoke(et, false);
这样就隐藏了,但是EditText的光标还存在,达到了要求,但是笔者满心欢喜跑在真机上面,并没有效果,键盘还是会弹出来,真机是4.0.4,模拟器是4.1.2 ,后来再查资料,才发现4.0 和4.1.2的SDK中该方法名称改了,4.0-4.1.2是用setSoftInputShownOnFocus
4.1.2之后是用setShowSoftInputOnFocus
这两个方法相当相似。
完整的代码如下:
int currentVersion = android.os.Build.VERSION.SDK_INT; String methodName = null; if (currentVersion >= 16) { // 4.1.2 methodName = "setShowSoftInputOnFocus"; } else if (currentVersion >= 14) { // 4.0 methodName = "setSoftInputShownOnFocus"; } if (methodName == null) { et.setInputType(InputType.TYPE_NULL); } else { try { Class cls = EditText.class; Method setSoftInputShownOnFocus; setSoftInputShownOnFocus = cls.getMethod(methodName, boolean.class); setSoftInputShownOnFocus.setAccessible(true); setSoftInputShownOnFocus.invoke(et, false); } catch (Exception e) { e.printStackTrace(); } }
最后完美实现了自定义的输入法。
更多相关文章
- 设置android软键盘,默认不弹出的方法
- Android(安卓)的回调事件详解
- Android(安卓)HAL 开发 (4)
- android manager 更新 android的有效方法【更新到 2015-1-18】
- Android设置字母大小写
- android gallery 竖直(上下)滑动
- android service 之一 (start service)
- button
- Android更新ui 的几种方式?Handler 机制(二)