android EditText maxLength允许用户输入更多内容。

12 浏览
0 Comments

android EditText maxLength允许用户输入更多内容。

我已经在xml布局文件中为一个EditText小部件设置了maxLength属性,并且它确实限制了字符的显示。

但它仍然允许用户在键盘上按更多的字母,而退格键删除这些额外的按键,而不是显示中的最后一个字母。

我认为这不是应该的。达到限制后按键应该停止接受更多的输入,即使它没有显示出来。

有没有解决办法?

更新

根据下面的答案,对于多行的EditText,还要添加textMultiLine属性。

android:inputType="textFilter|textMultiLine"

0
0 Comments

在上述内容中,出现了一个问题:用户在Android EditText中可以输入超过指定maxLength的字符。这个问题的原因是没有正确设置maxLength属性。解决方法是通过在EditText中设置android:maxLength属性来限制用户输入的字符数。

具体的解决方法如下:

1. 禁用自动建议功能(android:inputType="textFilter"或textNoSuggestions)。

2. 在EditText中设置android:maxLength属性,指定最大字符数。

以下是一个示例代码:


希望这对你有所帮助。如果输入的内容以字母开头,会出现相同的行为。请检查更新版本。我觉得我弄明白了。你做到了!太棒了!谢谢!你将在22小时后获得我的奖励,我现在无法颁发奖励的原因。我确认这个方法有效。哇!真的是这样。不过,不好意思晚了回复。最近很忙,几周没查看stackoverflow网站了。所以,我将接受这个答案,非常感谢!

0
0 Comments

在Android中,EditText控件的maxLength属性可以限制用户输入的字符数。然而,有时候即使设置了maxLength限制,用户仍然可以继续输入超过限制的字符。这是由于软件键盘缓冲区的存在,当用户按下退格键时,会删除缓冲区中的隐藏字符,这影响了用户体验。

为了解决这个问题,可以使用InputFilter来限制用户输入的字符数。首先,在XML布局文件中定义EditText控件:

    <EditText
   android:id="@+id/edit_Text"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" />

然后,在Java类中设置maxLength并应用InputFilter:

int maxLengthofYourEditText = 5;    // 设置限制长度
edit_TextObj.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLengthofYourEditText)});

以上代码中,我们将maxLength设置为5,并将其应用于edit_TextObj控件。

然而,在某些情况下,这种方法可能无效,特别是当输入的第一个字符是字母时。这个问题可以通过查看stackoverflow上的解决方案来解决。具体解决方法可以在这个链接中找到:stackoverflow.com/questions/30774123/…

总结起来,通过使用InputFilter和设置maxLength属性,我们可以限制用户输入的字符数。如果遇到无法解决的问题,可以参考stackoverflow上的解决方案。

0
0 Comments

问题出现的原因是,在使用TextWatcher监听EditText的输入变化时,如果输入的文本长度超过了设定的最大长度,代码会删除多余的字符。然而,对于以数字开头的输入,此bug无法重现。

解决方法是,可以自定义一个MyMaxLengthEditText类,继承自EditText,并在该类中使用TextWatcher监听输入变化。同时,可以使用maxLength属性来限制输入的最大长度。

以下是解决方法的代码示例:

public class MyMaxLengthEditText extends EditText {
    public static final String XML_NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android";
    private final int mMaxLength;
    public MyMaxLengthEditText(Context context) {
        super(context, null);
        mMaxLength = -1;
    }
    public MyMaxLengthEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        mMaxLength = attrs.getAttributeIntValue(XML_NAMESPACE_ANDROID, "maxLength", -1);
        addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            public void onTextChanged(CharSequence s, int start, int before, int count) {}
            public void afterTextChanged(Editable s) {
                if (s.length() >= mMaxLength) s.delete(mMaxLength, s.length());
            }
        });
    }
}

注意,该解决方法并不起作用,因为在afterTextChanged方法中,Editable对象s的长度不会超过设定的最大长度。问题可能出现在更深层次的地方,可能是在键盘缓冲区中。如果在afterTextChanged方法中记录每次输入的值,就会发现这个问题。

根据测试,如果输入以数字开头,无论输入什么字符,都能如预期地工作。然而,如果输入以字母字符开头,就会出现bug。

0