android EditText控制最大輸入行數


網絡摘抄,僅作記錄學習

EditText在android開發中是一個經常用到的基礎控件,功能也很強大,限制輸入字符類型,字數什么的。但是最近在工作中遇到了需要控制editText最大可輸入行數的要求。這個功能控件本身沒有提供,EditText.setMaxLines函數只能控制控件的最大可視高度並不符合要求。要實現控制最大可輸入行數勢必要用到addTextChangedListener去監聽控件中文本的變化,需要實現的函數有三個:

public void beforeTextChanged(CharSequence A, int B, int C,int D)

public void onTextChanged(CharSequence A, int B, int C, int D)

public void afterTextChanged(Editable A)

這個三個函數描述了editText控件的一次輸入過程:

beforeTextChanged 字符串A中從索引B位置開始的C個字符將被D個字符替換

onTextChanged 字符串A中從索引B位置開始的C個字符剛剛被D個字符替換

afterTextChanged 控件中現在的字符

這里beforeTextChanged ,onTextChanged 這兩個函數中是不能對控件內容進行重新的設定的,但是afterTextChanged 是可以遞歸的,當然要能正確的結束遞歸過程。

最大輸入函數的控制:

EditText.addTextChangedListener
@Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        int lines = editText.getLineCount();
        // 限制最大輸入行數
        if (lines > MAXLINES) {
            String str = s.toString();
            int cursorStart = editText.getSelectionStart();
            int cursorEnd = editText.getSelectionEnd();
            if (cursorStart == cursorEnd && cursorStart < str.length() && cursorStart >= 1) {
                str = str.substring(0, cursorStart-1) + str.substring(cursorStart);
            } else {
                str = str.substring(0, s.length()-1);
            }
            // setText會觸發afterTextChanged的遞歸
            editText.setText(str);    
            // setSelection用的索引不能使用str.length()否則會越界
            editText.setSelection(editText.getText().length());
        } 
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM