遇见“EditText禁止软键盘弹出”需求时,上网搜了一下,从一个博主的文章中发现了一个方法:
editText.setShowSoftInputOnFocus(false);
但是程序退到后台又切回前台时,软键盘又弹出来了。于是想到在onResume中隐藏软键盘不就好了?:
@Override
public void onResume() {
super.onResume();
Window window = activity.getWindow();
View view = window.peekDecorView();
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
很遗憾,这样做不行,有点不知所措的时候,想起了ViewTreeObserver的addOnGlobalLayoutListener监听,试了一下发现这回没问题了。
完整的代码:
editText= (EditText) mainView.findViewById(R.id.editText);
editText.setShowSoftInputOnFocus(false);
editText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Window window = activity.getWindow();
View view = window.peekDecorView();
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
顺便记录下两个方法,今后想用的时候就不用自己写了。
由于是使用自己实现的键盘,而不使用系统的键盘,所以要手动确定光标的位置,好往EditText中添加和删除字符。
//EditText中添加字符
void addEditTextValue(EditText editText, String textValue) {
//获得光标的位置
int index = editText.getSelectionStart();
StringBuffer sb = new StringBuffer(editText.getText().toString().trim());
//将字符插入光标所在的位置
sb = sb.insert(index, textValue);
editText.setText(sb.toString());
//设置光标的位置保持不变
Selection.setSelection(editText.getText(), index + 1);
}
//EditText中删除字符
void deleteEditTextValue(EditText editText) {
StringBuffer sb = new StringBuffer(editText.getText().toString().trim());
int index = editText.getSelectionStart();
if (index > 0) {
sb = sb.delete(index - 1, index);
editText.setText(sb.toString());
Selection.setSelection(editText.getText(), index - 1);
}
}