方法一:使用setOnKeyListener(),这种方式只能监听硬键盘事件所以大多数android设备不能用
editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.i(TAG, editText.getText()); return false; } });方法二:使用TextWatcher类,可监听软键盘和硬键盘的,只需实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChanged和afterTextChanged方法,用于更加详细的输入监听处理
editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Log.i(TAG, "输入文字中的状态,count是输入字符数"); Log.i(TAG, editText.getText()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { Log.i(TAG, "输入文本之前的状态"); } @Override public void afterTextChanged(Editable s) { Log.i(TAG, "输入文字后的状态"); } });方法三:实现当输入到最大值时则不允许再输入,另外由EditText并没有提供给我们EditText的禁止输入功能,以下方法也实现了此功能。
private void setEditable(EditText editText, int maxLength, boolean value) { if (value) { editText.setFilters(new InputFilter[] { new MyEditFilter(maxLength) }); editText.setCursorVisible(true); editText.setFocusableInTouchMode(true); editText.requestFocus(); } else { editText.setFilters(new InputFilter[] { new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { return source.length() < 1 ? dest.subSequence(dstart, dend) : ""; } } }); editText.setCursorVisible(false); editText.setFocusableInTouchMode(false); editText.clearFocus(); } }