public class MainActivity extends Activity {
private EditText editText;
private TextView tip;
private final int charMaxNum = 10; // 允许输入的字数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
editText = (EditText) findViewById(R.id.main_et);
editText.addTextChangedListener(new EditChangedListener());
tip = (TextView) findViewById(R.id.main_tv);
tip.setText(0/+charMaxNum);
}
class EditChangedListener implements TextWatcher {
private CharSequence temp; // 监听前的文本
private int editStart; // 光标开始位置
private int editEnd; // 光标结束位置
// 输入文本之前的状态
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
temp = s;
}
// 输入文字中的状态,count是一次性输入字符数
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// if (charMaxNum - s.length() <= 5) {
// tip.setText(还能输入 + (charMaxNum - s.length()) + 字符);
// }
tip.setText((s.length()) + / + charMaxNum);
}
// 输入文字后的状态
@Override
public void afterTextChanged(Editable s) {
/** 得到光标开始和结束位置 ,超过最大数后记录刚超出的数字索引进行控制 */
editStart = editText.getSelectionStart();
editEnd = editText.getSelectionEnd();
if (temp.length() > charMaxNum) {
// Toast.makeText(getApplicationContext(), 最多输入10个字符, Toast.LENGTH_SHORT).show();
s.delete(editStart - 1, editEnd);
editText.setText(s);
editText.setSelection(s.length());
}
}
};
}