先上结论:假如长度限制为200,maxLength需要设置为201(必须要大于200,原因后面揭晓)
<EditText
android:id="@+id/item_edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:gravity="start"
android:hint="请输入,不超过200个字"
android:maxLength="201"
android:textSize="16sp" />
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 200;) {
Toast.makeText(this, "文字长度不可超过两百",Toast.LENGTH_SHORT).show();
mEditText.setText(s.toString().substring(0,200));
//当前长度提示赋值( 200 + "/200");
}else {
//当前长度提示赋值( s.length() + "/200");
}
}
});
注意:EditText布局中的maxLength属性时特意设置为201,为什么不是200呢?
因为设置为200时,键盘再输入内容时addTextChangedListener监听的三个方法无任何反应。
而设置为200以上时,比如201时这时候用户输入超过200字符的动作将会被监听,只需要在监听中给出提示并剪切掉超过200的字符,也就是这行代码:mEditText.setText(s.toString().substring(0,200));
被pass的方案1:
可能有人会说,可以用setOnEditorActionListener监听回车事件啊,但是我这边经过严格测试,很多情况下用户输入文字时不会触发其回调,用户可以点击输入提示的预选栏进行输入,预选栏有内容时点回车也不会触发,只有单击部分具体按钮的时候会有回调,比如回车删除等。
被pass的方案2:
Activity的全局按键监听onKeyDown(); 首先从代码设计的角度就不推荐该方案,因为一个是局部限制一个是全局监听,职责交叉使得程序混乱。其次这边还需要在回调中判断按键是否是键盘按键,因为返回键,Home键,等其他键也会触发该监听。
好了,文章到这里就结束了,如果您有不同的见解或者有疑问的话欢迎到评论区留言。
如果您感觉深海写的不错的话,请给文章点个赞吧,感谢各位的支持!
|