Android学习之自定义TextWatcher来监听文本最大输入字数

开发中有种很可能会遇到的需求就是限制EditText的文本输入字数,例如微博就限制140字,如果只是限制输入的字数的话很简单,EditText有个属性叫android:maxLength,设置140就行了,但是当达到最大输入字数时还要提示用户达到了呢?这时候就需要自定义TextWatcher了,TextWatcher字如其意,就是文本观察器,用来观察文本的变化的,一般用在EditText中。好了,上代码:

布局中画个EditText就行了,先看自定义的TextWatcher,除了达到最大字数时会弹出Toast,同时也会将光标放置在文本最后:

/**
 * 最大输入观察器
 * 监听输入内容是否超出最大长度,并设置光标位置
 *
 * @author yuzhentao
 */
public class MaxInputTextWatcher implements TextWatcher {

    private Context context;

    private EditText editText = null;
    private int maxLength = 0;

    public MaxInputTextWatcher(Context context, EditText editText, int maxLength) {
        this.context = context;
        this.editText = editText;
        this.maxLength = maxLength;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Editable editable = editText.getText();
        int length = editable.length();//原字符串长度
        if (length > maxLength) {//如果原字符串长度大于最大长度
            int selectEndIndex = Selection.getSelectionEnd(editable);//getSelectionEnd:获取光标结束的索引值
            String str = editable.toString();//旧字符串
            String newStr = str.substring(0, maxLength);//截取新字符串
            editText.setText(newStr);
            editable = editText.getText();
            int newLength = editable.length();//新字符串长度
            if (selectEndIndex > newLength) {//如果光标结束的索引值超过新字符串长度
                selectEndIndex = editable.length();
                Toast.makeText(context, "最多只能输入" + selectEndIndex + "个字哦", Toast.LENGTH_SHORT).show();
            }
            Selection.setSelection(editable, selectEndIndex);//设置新光标所在的位置
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }

}
首先当然是实现TextWatcher了,会实现3个方法,一般我们都在onTextChanged()中操作,细节大家看代码就行。

然后就是主界面中去使用这个自定义的TextWatcher了:

/**
 * 主界面
 *
 * @author yuzhentao
 */
public class MainActivity extends Activity {

    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        context = this;
        EditText et = (EditText) findViewById(R.id.edittext_activity_main);
        et.addTextChangedListener(new MaxInputTextWatcher(context, et, 140));
    }

}
通过addTextChangedListener()来使用这个自定义的TextWatcher,输入自己想要的最大输入字数即可。

一个很简单的功能,希望对大家有所帮助。

效果图:


Demo地址:http://download.csdn.net/detail/qq_23940659/9468880

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值