Edittext在平时开发中很是常见,因为只要有输入框,就可能会对Edittext进行特殊的操作,比如自动弹出软键盘,禁止自动弹出,监听输入等。
1.Edittext禁止自动弹出软键盘
在Edittext的父控件中添加如下属性即可,让它的父控件自动获取焦点。
android:focusable="true"
android:focusableInTouchMode="true"
2.自动弹出软件盘
让edittext自动获取焦点,弹出系统的软键盘。大家在实际使用中很可能会遇到不生效的问题,这里需要加上短时间的延时,不然不会生效。
public static void showSoftInput(final Context context, final EditText et) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
et.setFocusable(true);
et.setFocusableInTouchMode(true);
//请求获得焦点
et.requestFocus();
//调用系统输入法
InputMethodManager inputManager = (InputMethodManager) et
.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(et, 0);
}
});
}
}, 100);
}
3.代码控制关闭软键盘
public static void closeSoftInput(EditText editText,Context context) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
}
}
4.设置Edittext的imeOptions属性
EditText的imeOptions属性有8种,分别是:
- actionDone 对应 EditorInfo.IME_ACTION_DONE类型
Enter键显示 完成 - actionGo 对应 EditorInfo.IME_ACTION_GO 类型
Enter键显示 前进 - actionNext 对应 EditorInfo.IME_ACTION_NEXT 类型
Enter键显示 下一项 - actionNone 对应 EditorInfo.IME_ACTION_NONE 类型
Enter键显示 无动作 - actionPrevious 对应 EditorInfo.IME_ACTION_PREVIOUS 类型
Enter键显示 上一项 - actionSearch 对应 EditorInfo.IME_ACTION_SEARCH 类型
Enter键显示 搜索 - actionUnspecified 对应 EditorInfo.IME_ACTION_UNSPECIFIED 类型
Enter键显示 未指定 - actionSend 对应 EditorInfo.IME_ACTION_SEND类型
Enter键显示 发送
例如,监听键盘的enter键,使用对edittext设置KeyListener,通过回调的keyCode == KeyEvent.KEYCODE_ENTER判断是否点击enter键。不过这样会调用两次,一次是up事件,一次是down事件,可以再加入一个条件过滤其中一个事件。
mEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
//监听到enter键抬起事件
}
return false;
}
});
网友评论