限制EditText输入的最大字符数

在开发过程中,经常遇到需要限制输入框长度的问题,在提交的时候判断长度再提示用户是一种解决方案,但是体验远远不如直接在输入框内限制用户的输入字数,超出后就就不能再输入。

下面介绍下实现这个功能的几种方法:


方法一:在xml设置maxLength属性

*
*

方法二:通过setFilters来过滤长度

editText.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(20) });

*
*

方法三:通过监听输入过程来控制光标位置

import android.text.Editable; import android.text.Selection; import android.text.TextWatcher; import android.widget.EditText; /* * 监听输入内容是否超出最大长度,并设置光标位置 * */ public class MaxLengthWatcher implements TextWatcher { private int maxLen = 0; private EditText editText = null; public MaxLengthWatcher(int maxLen, EditText editText) { this.maxLen = maxLen; this.editText = editText; } public void afterTextChanged(Editable editable) { // TODO Auto-generated method stub } public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub Editable editable = editText.getText(); int len = editable.length(); if (len > maxLen) { int selEndIndex = Selection.getSelectionEnd(editable); String str = editable.toString(); //截取新字符串 String newStr = str.substring(0, maxLen); editText.setText(newStr); editable = editText.getText(); //新字符串的长度 int newLen = editable.length(); //旧光标位置超过字符串长度 if (selEndIndex > newLen) { selEndIndex = editable.length(); } //设置新光标所在的位置 Selection.setSelection(editable, selEndIndex); } } }

使用方法

editText.addTextChangedListener(new MaxLengthWatcher(10, editText));