android系统中,点击EditText时,隐藏系统软键盘,显示光标

来源:互联网 发布:中英联合声明失效 知乎 编辑:程序博客网 时间:2024/05/25 12:21

 因为项目中要用自定义的随机键盘,所以必须得屏蔽系统软键盘,但是在4.0的测试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,但是光标也会隐藏,所以无法使用。 

        3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)来实现。或者设置editText.setKeyListener(null)来实现。3.0以上版本除了调用隐藏方法setShowSoftInputOnFocus(false),由于是系统内部方法,无法直接调用所以采用反射的方式来进行调用,如下

在项目中(当前项目使用的是android4.0):

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. int SDK_INT = android.os.Build.VERSION.SDK_INT;  
  2. if (SDK_INT <= 10) {  
  3.     // 点击EditText,屏蔽默认输入法  
  4.     editText.setInputType(InputType.TYPE_NULL); // editText是声明的输入文本框。  
  5. else {  
  6.     // 点击EditText,隐藏系统输入法  
  7.     getWindow().setSoftInputMode(  
  8.             WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);  
  9.     try {  
  10.         Class<EditText> cls = EditText.class;  
  11.         Method method = cls.getMethod("setShowSoftInputOnFocus",  
  12.                 boolean.class);// 4.0的是setShowSoftInputOnFocus,4.2的是setSoftInputShownOnFocus  
  13.         method.setAccessible(false);  
  14.         method.invoke(editText, false); // editText是声明的输入文本框。  
  15.     } catch (NoSuchMethodException e) {  
  16.         e.printStackTrace();  
  17.     } catch (IllegalArgumentException e) {  
  18.         e.printStackTrace();  
  19.     } catch (IllegalAccessException e) {  
  20.         e.printStackTrace();  
  21.     } catch (InvocationTargetException e) {  
  22.         e.printStackTrace();  
  23.     }  
  24. }  

注:

        上面反射的方法是从TextView的源码中找到的。因为EditText是继承TextView,看网上据说有的sdk里面是"setSoftInputShownOnFocus",反正具体是跟自己的sdk相对应就可以了。4.0系统对应设置的是setShowSoftInputOnFocus,4.2系统对应设置的是setSoftInputShownOnFocus,这两个版本的都测试过了,是正确可用的。

参考:

Android自定义软键盘的实现

android自定义软键盘

Android.edittext点击时,隐藏系统弹出的键盘,显示出光标


http://blog.163.com/zhaoliping0736@126/blog/static/5550761120149684736794/


0 0
原创粉丝点击