关于EditText的软键盘弹出处理问题

2017-01-14 15:50:52来源:http://www.jianshu.com/p/497cc0d843bf作者:上九楼的快活人点击

第七城市

最近公司做项目遇到EditText碰见软键盘自动弹出的问题搞的笔者头疼不已情况如下,不过好在已经解决


    1.进入到activity之后自动弹出软键盘,但其实那个activity是没有editText控件的
2. 在有editText控件的情况下想关控件的小键盘关不了;

好了进入正题;



    1.首先如果你需要进入某个Activity就需要把软键盘关掉,在清单文件加入以下即可:
android:windowSoftInputMode="stateHidden"
原因是editText 会自动获取焦点,或者你调用editText.clearfocus()即可;
2.像类似的:微信支付, 支付宝支付,都差不多要用小键盘自动弹出弹出或者是点击editText控件弹出小键盘;
自动弹出键盘可以时间一个定时器来做代码实现该需求,代码如下:
在清单文件添加:
android:windowSoftInputMode="adjustResize"

// 定义一个定时器100ms之后打开键盘
new Timer().schedule(new TimerTask() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
// 如果在自动弹出的状态下 以下代码隐藏
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
},100);
//但是笔者在项目中以上代码会失效! 清除焦点还是会失效最后通过反射代码如下:
public void setKeyPad(EditText editText) {
if (android.os.Build.VERSION.SDK_INT <= 10) {
editText.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(editText, false);
} catch (Exception e) {
e.printStackTrace();
}
}
}




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台