Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EditText中的maxLength属性不为';无法通过xml和java按预期工作_Java_Android_Xml_Android Edittext_Android Input Filter - Fatal编程技术网

EditText中的maxLength属性不为';无法通过xml和java按预期工作

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删除文本字符 现在这里发生了什么?

也许这个问题已经得到了回答,但我在上面找不到答案

我有一个非常简单的要求:限制EditText中字符的长度

为此,我使用xml中的
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"