Android EditText繳獲與監聽輸入事件
阿新 • • 發佈:2019-01-09
預期目標:如下圖,輸入框中每輸入一個字元,下面的TextView可以迅速的顯示出來輸入框中的內容。
1.第一種方法:使用setOnKeyListener(),不過這種方式只能監聽硬鍵盤事件。
edittext.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { textview.setText(edittext.getText()); return false; } });
2.第二種方法:使用TextWatcher類,這種方式是可以監聽軟鍵盤和硬鍵盤的,我們只需要實現onTextChanged方法即可,另外TextWatcher還提供了beforeTextChanged和afterTextChanged方法,用於更加詳細的輸入監聽處理。
edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { textview.setText(edittext.getText()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
3、程式碼片段:實現當輸入到最大值時則不允許再輸入了,另外,由於EditText並沒有提供給我們EditText的禁止輸入功能,以下方法也實現了此功能。
private void setEditable(EditText mEdit, int maxLength, boolean value) { if (value) { mEdit.setFilters(new InputFilter[] { new MyEditFilter(maxLength) }); mEdit.setCursorVisible(true); mEdit.setFocusableInTouchMode(true); mEdit.requestFocus(); } else { mEdit.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) : ""; } } }); mEdit.setCursorVisible(false); mEdit.setFocusableInTouchMode(false); mEdit.clearFocus(); } }