zoukankan      html  css  js  c++  java
  • 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());
            } 
        }
  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/woaixingxing/p/7129226.html
Copyright © 2011-2022 走看看