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,输入自己想要的最大输入字数即可。

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

效果图:

Android学习之自定义TextWatcher来监听文本最大输入字数_第1张图片

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

你可能感兴趣的:(android,EditText,text,光标位置,TextWatcher)