安卓 EditText 最大长度

94

我在一个EditText字段中设置了文本的最大长度。

<EditText
            android:id="@+id/courseDescriptionField"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"
            android:lines="5"
            android:maxLength="@integer/max_course_description_limit"
            android:gravity="left|top" >
        </EditText>

但我遇到的问题是,当输入的文本超过140个字符后,文本就不再显示了,但文本的输入仍在继续,只是没有出现在屏幕上,但在“缓冲区”中(即建议中)会出现。

另外,我使用TextWatcher来跟踪此限制。有没有办法完全限制文本的数量,使得在输入超过140个字符后,除了退格/删除键以外的任何按键都不起作用?

8个回答

108

2
我有同样的问题,但这对我没有用。 - Mansi
你的代码出了什么问题?提一个新问题并贴上你的代码,我会帮你看一下。将你的问题链接放在这里让我找到它。 - Ushal Naidoo
同样的问题!有解决方案吗? - mrroboaat
8
我不认为这是一个重复的问题。有人能解释一下为什么这样做会起作用,而使用应用程序常量则不会起作用吗?似乎在xml中将字符限制设为一个值不应该改变文本缓冲区的工作方式。 - Elliott

45

我遇到过同样的问题。

这是一个解决方法。

android:inputType="textNoSuggestions|textVisiblePassword"
android:maxLength="6"

感谢如何关闭EditText中的建议

的帮助。


1
似乎只需要使用textNoSuggestions来删除按下返回键时的字母。 - Steve Ham
1
这很奇怪,不知道谷歌是否知道这个错误! - Skynet
2
这应该是被接受的答案,仅限制maxLength并不能解决问题。 - Nactus
5
你好,我是发布了“已采纳”答案的人。我同意@Nactus的观点。这个答案应该被采纳。我的回答并没有完全解决这个问题。 - Ushal Naidoo
4
这是在您不需要建议时使用的解决方法。但是,如果您需要长度限制和建议,则无法使用此方法。自安卓诞生以来,这个问题就一直存在,可惜谷歌并不关心修复它。悲哀啊... - Dennis K
显示剩余6条评论

18
EditText editText= ....;
InputFilter[] fa= new InputFilter[1];
fa[0] = new InputFilter.LengthFilter(8);
editText.setFilters(fa);

2
单行:editText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(maxlength) }); - Basil

7

我有同样的问题。当你添加这个时,它可以完美地工作:

android:inputType="textFilter"

to your EditText.


6
你可以尝试这个。
 EditText et = (EditText) findViewById(R.id.myeditText);
    et.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(140) }); // maximum length is 140

2

如果您使用maxLength = 6,有时输入的字符会被添加到键盘顶部的建议中。因此,当您删除输入的字母时,它将首先删除建议,然后才是EditText中的实际文本。为此,您需要删除建议。只需添加以下内容:

android:inputType="textNoSuggestions"` 

或者

android:inputType="textFilter"

它将会移除那些建议。

1
如果您想要查看计数器标签,则可以使用 app:counterEnabledandroid:maxLength,例如:
<android.support.design.widget.TextInputLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  app:counterEnabled="true">

  <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxLength="420" />

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

不要TextInputLayout上设置app:counterMaxLength,因为它会与android:maxLength冲突,并导致文本达到大小限制后出现看不见的字符问题。

0

对我来说,这个解决方案可行:

edittext.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接