EditText中的maxLength属性不为';无法通过xml和java按预期工作
也许这个问题已经得到了回答,但我在上面找不到答案 我有一个非常简单的要求:限制EditText中字符的长度 为此,我使用xml中的EditText中的maxLength属性不为';无法通过xml和java按预期工作,java,android,xml,android-edittext,android-input-filter,Java,Android,Xml,Android Edittext,Android Input Filter,也许这个问题已经得到了回答,但我在上面找不到答案 我有一个非常简单的要求:限制EditText中字符的长度 为此,我使用xml中的maxLength标记。 奇怪的是,如果输入文本的长度超过了指定的限制,则无法通过软键盘按backspace删除文本。输入的文本保留在EditText字段中。关闭并重新打开软键盘后,文本变为“可删除” 在记录日志时,我可以看到source将保持不变,如果超过maxLength,但跨距dest会改变它应该改变的方式,按backspace删除文本字符 现在这里发生了什么?
maxLength
标记。
奇怪的是,如果输入文本的长度超过了指定的限制,则无法通过软键盘按backspace删除文本。输入的文本保留在EditText字段中。关闭并重新打开软键盘后,文本变为“可删除”
在记录日志时,我可以看到source
将保持不变,如果超过maxLength
,但跨距dest
会改变它应该改变的方式,按backspace删除文本字符
现在这里发生了什么?这是一个bug还是默认行为。因为如果用户输入的文本超过了限制,他就没有机会更正
编辑:
Sandeep Kumar使用Java代码设置maxLength的建议方法也会导致相同的结果
et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(5)});
顺便说一句,我使用的是Android API 4.4.2和SDK 23.0.2
TextView editEntryView = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(8);
editEntryView.setFilters(filterArray);
如果这个代码有用,请投票 对我有效的是使用长度限制textwatcher,如下所示,并使用textNoSuggestions作为输入类型
public class LengthTextWatcher implements TextWatcher {
String prevVal = "";
int length;
public LengthTextWatcher(int l) {
length = l;
}
@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 != null && s.length() > 0) {
if(s.length() > length) {
s.clear();
s.insert(0, prevVal);
}
prevVal = s.toString();
}
}
}
...
应用textWatcher的示例方法
mFirstNameET.addTextChangedListener(new LengthTextWatcher(35));
及
这会产生相同的结果。如果maxLength超过,则按backspace可保持编辑文本中的字符不变。您解决过这个问题吗?我遇到了同样的问题,我来这里寻找答案。很高兴不只是我一个人。@StayFrosty这件事还没解决。主要的事实是我再也不能把时间放在这上面了。
public class LengthTextWatcher implements TextWatcher {
String prevVal = "";
int length;
public LengthTextWatcher(int l) {
length = l;
}
@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 != null && s.length() > 0) {
if(s.length() > length) {
s.clear();
s.insert(0, prevVal);
}
prevVal = s.toString();
}
}
}
...
mFirstNameET.addTextChangedListener(new LengthTextWatcher(35));
android:inputType="textNoSuggestions"