具有MaxLength的EditText无法在限制后停止用户输入

时间:2018-02-05 11:56:32

标签: android android-edittext clipboard

EditText goalName设置为maxLength 30 InputFilter(java),android:maxLength="30"(xml声明)。

但是在第30个字母之后,字母没有显示在字段中,但剪贴板(键盘建议)显示所有字母。我在下面显示了在第30个字母后剩下显示0个字符的剩余字符数。但是我必须通过按退格键删除所有这些额外的字符。当它到达第30个字母时它开始显示1个字符左边等等。

        final InputFilter ip = new InputFilter.LengthFilter(30);
        goalName.setFilters(new InputFilter[]{ip});

        /*To find no of Characters Left for Goal Name*/
        goalName.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) {
                noOfChar.setText((30 - s.length()) + "  characters left");
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

4 个答案:

答案 0 :(得分:0)

尝试这样做:

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(s.length() > 30) s = s.subSequence(0,30);
            goalName.requestFocus(30);
            noOfChar.setText((30 - s.length()) + "  characters left");

        }

只是测试,因为它应该在29而不是30完成,我不确定这部分

并尝试删除过滤器:

//final InputFilter ip = new InputFilter.LengthFilter(30);
//goalName.setFilters(new InputFilter[]{ip});

只需使用Xml声明:

android:inputType="textPersonName"
android:maxLength="30"
android:maxLines="1"

答案 1 :(得分:0)

如果你在没有加载edittext的情况下进入android的新设计会更好。

<android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:counterEnabled="true"
            app:counterMaxLength="30"
            app:counterTextAppearance="@style/TextLimitStyle">

            <android.support.design.widget.TextInputEditText
              android:id="@+id/etMessage"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:gravity="top"
              android:hint="Say something..."
              android:maxLength="30" />

</android.support.design.widget.TextInputLayout>

答案 2 :(得分:0)

当我将 android:maxLengthandroid:inputType="textMultiline" 一起使用时,我遇到了同样的问题,即我的 EditText 不遵守字符限制。我发现使用 InputFilter/LengthFilter 有助于完成这项工作。

Kotlin 中的示例用法:

val MAX_CHARS_LENGTH: Int = ...
val myEditText: EditText = ...
myEditText.filters = arrayOf(LengthFilter(MAX_CHARS_LENGTH))

对于字符数显示,我建议覆盖 afterTextChanged 而不是 onTextChanged

答案 3 :(得分:-1)

android:maxLength="30"

将它放在布局文件

中的EditText中

喜欢这个

<EditText
        android:id="@+id/msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="10dip"
        android:background="@drawable/edit_textbox_new_background"
        android:gravity="top"
        android:inputType="textMultiLine"
        android:lines="5"
        android:maxLength="500"
        android:padding="10dip" />