标签:
首先来看一下TextWatcher的源代码
package android.text; /** * When an object of a type is attached to an Editable, its methods will * be called when the text is changed. */ public interface TextWatcher extends NoCopySpan { /** * This method is called to notify you that, within <code>s</code>, * the <code>count</code> characters beginning at <code>start</code> * are about to be replaced by new text with length <code>after</code>. * It is an error to attempt to make changes to <code>s</code> from * this callback. */ public void beforeTextChanged(CharSequence s, int start, int count, int after); /** * This method is called to notify you that, within <code>s</code>, * the <code>count</code> characters beginning at <code>start</code> * have just replaced old text that had length <code>before</code>. * It is an error to attempt to make changes to <code>s</code> from * this callback. */ public void onTextChanged(CharSequence s, int start, int before, int count); /** * This method is called to notify you that, somewhere within * <code>s</code>, the text has been changed. * It is legitimate to make further changes to <code>s</code> from * this callback, but be careful not to get yourself into an infinite * loop, because any changes you make will cause this method to be * called again recursively. * (You are not told where the change took place because other * afterTextChanged() methods may already have made other changes * and invalidated the offsets. But if you need to know here, * you can use {@link Spannable#setSpan} in {@link #onTextChanged} * to mark your place and then look up from here where the span * ended up. */ public void afterTextChanged(Editable s); }
下面通过通过一个小实例来学习TextWatcher的相关用法
实现该接口
TextWatcher mTextWatcher = new TextWatcher() { private CharSequence temp; private int editStart; private int editEnd; @Override public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) { temp = s; } @Override public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) { mDetailView.setText(s); } @Override public void afterTextChanged(Editable s) { editStart = mEditText.getSelectionStart(); editEnd = mEditText.getSelectionEnd(); if (temp.length() > 11) { Toast.makeText(MainActivity.this, "你输入的字数已经超过了限制!", Toast.LENGTH_SHORT).show(); s.delete(editStart - 1, editEnd); int tempSelection = editStart; mEditText.setText(s); mEditText.setSelection(tempSelection); } } };再注册这个监听
TextView mDetailView; EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDetailView = (TextView) findViewById(R.id.mDetailView); mEditText = (EditText) findViewById(R.id.mEditText); mEditText.addTextChangedListener(mTextWatcher); }
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
版权声明:本文为博主原创文章,欢迎转载,转载请注明出处http://blog.csdn.net/ouyang_peng
我的Android进阶之旅------>Android关于TextWatcher的初步了解
标签:
原文地址:http://blog.csdn.net/ouyang_peng/article/details/47125309