Android 限制编辑文本长度
我正试图这样做,但我得到了堆栈溢出错误,所以我接受了建议,来到这里寻求帮助 我想限制用户可以插入的文本的长度,因此当用户键入长度限制以上的字符时,该字符将被删除Android 限制编辑文本长度,android,android-edittext,Android,Android Edittext,我正试图这样做,但我得到了堆栈溢出错误,所以我接受了建议,来到这里寻求帮助 我想限制用户可以插入的文本的长度,因此当用户键入长度限制以上的字符时,该字符将被删除 sms_input.addTextChangedListener(new TextWatcher(){ @Override public void afterTextChanged(Editable s) { String cs = sms_input.getText().to
sms_input.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
String cs = sms_input.getText().toString();
if (cs.length() > 160) { sms_input.setText(cs.substring(0, MAX_MSG_LENGTH + 1)); }
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
});
日志:
09-25 17:07:34.972: E/AndroidRuntime(22733): FATAL EXCEPTION: main
09-25 17:07:34.972:E/AndroidRuntime22733:java.lang.StackOverflower错误
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.graphics.Paint.getExtranuAdvancesPaint.java:1754
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.graphics.Paint.getExtranuAdvancesPaint.java:1720
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.text.MeasuredText.addStyleRunMeasuredText.java:164
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.text.MeasuredText.addStyleRunMeasuredText.java:204
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.text.StaticLayout.generateStaticLayout.java:281
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.text.dynamiclayot.reflowdynamiclayot.java:284
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.text.DynamicLayout.DynamicLayout.java:170
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.makeSingleLayoutTextView.java:5986
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.MakeNewLayoutExtView.java:5884
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.checkForRelayoutTextView.java:6423
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3696
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.0
java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.EditText.setTextEditText.java:80
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.settextextextview.java:3529
09-25 17:07:34.972:E/AndroidRuntime22733:com.easyray.lemon.SmsChat$5.PostextChangedMschat.java:211
09-25 17:07:34.972:E/AndroidRuntime22733:at android.widget.TextView.sendAfterTextChangedTextView.java:7247
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3703
09-25 17:07:34.972:E/AndroidRuntime22733:at-android.widget.TextView.setTextTextView.java:3554
09-25 17:07:34.972:E/AndroidRuntime22733:at android.w同样的问题之前已经得到了回答,例如这里
但基本上发生的情况是,您在方法afterTextChanged中更改了文本,并触发再次调用该方法,从而引发以StackOverflow异常结尾的无限循环:您不想做所有这些。在XML中试试这个
android:maxLength="120"
当您尝试输入超过120个字符时,它只会阻止您输入下一个字符
我想这就是你要找的。如果没有,请留下它。您能描述一下您的问题以及代码吗?完成后,我一定是意外删除了它。您遇到了什么错误?堆栈溢出错误?真正地我们能看看你的日志吗?完成了,但我不能正确地发布日志,抱歉,没问题。我对它进行了编辑,使它更具可读性。检查下面的答案。至少现在你知道为什么会发生了。首先,感谢你给出了很好的解释。我想知道如何解决这个问题。如果对小于maxLength的1进行检查,并且当发现已达到该值时,该怎么办,setText方法将设置仍然小于maxLength的字符串,然后禁用EditText,还可能删除与其关联的TextWatcher?一种可能的解决方案是使用removeTextChangedListener删除watcher,设置文本,然后再次添加侦听器。是否有其他方法获得相同的效果?也许这种方法是错误的。如果我可以让textwatcher不调用ContextChanged,如果长度>最大长度,那将非常有用。为什么不使用InputFilter.LengthFilter160?长过滤器是甜的!我希望我能再次投票支持你的答案!