您的位置:首页 > 其它

隐藏软键盘方法

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

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

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

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS)



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了,  下面贴代码。

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);
}

}

}

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

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

     

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

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: