您的位置:首页 > 移动开发 > Android开发

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

2013-08-28 15:13 696 查看
因为要用自己创建的虚拟大键盘,所以屏蔽系统的键盘,但是在4.1的测试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,但是光标也会隐藏,所以无法使用。

3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)来实现。或者设置editText.setKeyListener(null)来实现.

3.0以上版本除了调用隐藏方法:setShowSoftInputOnFocus(false),由于是系统内部方法。无法直接调用所以采用反射的方式来进行调用,如下

Class<EditText>
cls = EditText.
class
;
try
{
Method
setShowSoftInputOnFocus = cls.getMethod(
"setShowSoftInputOnFocus"
,
boolean.
class
);
setShowSoftInputOnFocus.setAccessible(
false
);
setShowSoftInputOnFocus.invoke(mEtInput,
false
);
}
catch
(NoSuchMethodException
e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(IllegalArgumentException
e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(IllegalAccessException
e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(InvocationTargetException
e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
上面反射的方法是从TextView的源码中找到的。因为EditText是继承它的,看网上据说有的sdk里面是"setSoftInputShownOnFocus",反正具体是跟自己的sdk相对应就可以了

if (android.os.Build.VERSION.SDK_INT <= 10) {

mEtInput.setInputType(InputType.TYPE_NULL);

}else {

getWindow().setSoftInputMode(

WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

try {

Class<EditText> cls = EditText.class;

Method setShowSoftInputOnFocus;

setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus",

boolean.class);

setShowSoftInputOnFocus.setAccessible(true);

setShowSoftInputOnFocus.invoke(mEtInput,false);

}catch (Exception e) {

e.printStackTrace();

}

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