1. 程式人生 > >Android EditText繳獲與監聽輸入事件

Android EditText繳獲與監聽輸入事件

預期目標:如下圖,輸入框中每輸入一個字元,下面的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還提供了beforeTextChangedafterTextChanged方法,用於更加詳細的輸入監聽處理。

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(); 
    } 
}