EditText 关于隐藏软键盘.

来源:互联网 发布:catia v5软件有多大 编辑:程序博客网 时间:2024/05/17 04:47

  有的时候,我们会接受到一些莫名的需求,比如说自己定制键盘, 计算器等等. 如果我们用EditText的话, 系统会默认弹出软键盘,为了需求需要。 我们需要想尽各种办法 来把系统的软件盘给隐藏掉.

    现在网上有很多隐藏软键盘的方法,如下所示:


   1, 如果软键盘正在显示,那么调用以下代码就会隐藏,  反之一样.

<span style="font-size:18px;">InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);</span>

2.强制隐藏软键盘.

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  imm.hideSoftInputFromWindow(et.getWindowToken(), 0);

3.默认不显示软键盘, 在Activity节点下配置.
Android:windowSoftInputMode="adjustUnspecified|stateHidden"



以上几种方法其实都不是理想状态,  只要你在点击一下EditText, 软键盘还是会弹出来,  下面我会说两种理想状态的实现方式.

  1. 设置   editText.setInputType(InputType.TYPE_NULL);   设置后则不会弹出软键盘, 不过唯一不足的是 没有了光标. 只能从前到后依次输入.

  2.  用该方法的前提 是版本必须要  >3.0 也就是 sdk 10以上. 否则 就只能使用上面的 TYPE_NULL了,  下面贴代码。

<span style="font-size:18px;">public class NoSoftKbEditText extends EditText {public NoSoftKbEditText(Context context) {super(context);init();}public NoSoftKbEditText(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}public NoSoftKbEditText(Context context, AttributeSet attrs) {super(context, attrs);init();}private void init() {if (android.os.Build.VERSION.SDK_INT > 10) {// 3.0及其以上Class<EditText> clazz = EditText.class;Method setShowSoftInputOnFocus = null;try {   //利用反射获取系统setShowSoftInputOnFocus方法setShowSoftInputOnFocus = clazz.getMethod("setShowSoftInputOnFocus", boolean.class);} catch (Exception e) {try {    //出现异常再次获取.setShowSoftInputOnFocus = clazz.getMethod("setSoftInputShownOnFocus", boolean.class);} catch (NoSuchMethodException ex) {}}if (setShowSoftInputOnFocus != null) {setShowSoftInputOnFocus.setAccessible(false);try {setShowSoftInputOnFocus.invoke(this, false); //反射调用该方法 并设置第二参数为false.} catch (Exception e) {this.setInputType(InputType.TYPE_NULL);   //出现异常则 设置成没有光标的状态}} else {  // 没有获取到方法 则设置成无光标状态.this.setInputType(InputType.TYPE_NULL);}} else {// 3.0以下this.setInputType(InputType.TYPE_NULL);}}}</span>

  接下来你只需要把它当成自定义控件一样使用就可以了,  完美解决了不弹出软键盘问题.

  这里就不贴下载地址了. 用的话 复制代码即可。


     

    源码地址:传送门, 传送门1

    

1 0
原创粉丝点击