2012-08-23 14 views
74

Ustawiam maksymalną długość tekstu w polu EditText.Android EditText Max Length

<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> 

Problemem dla mnie jest jednak to, że tekst przestanie pojawiać się po 140 znaków, ale wciąż się wpisać, oprócz tego, że tekst po prostu się nie pojawia, ale jednak wydaje się, w „bufor” (co oznacza sugestię), jeśli tak nazwałbyś to.

Na marginesie używam modułu TextWatcher do śledzenia limitu. Czy istnieje sposób na całkowite ograniczenie ilości tekstu, tak aby w przypadku 140 znaków nic się nie działo po naciśnięciu czegoś innego niż backspace/delete?

Odpowiedz

89

Możliwy duplikat Limit text length of EditText in Android

Korzystanie android: MaxLength = "140"

To powinno działać. :)

Nadzieję, że pomaga

+2

Mam ten sam problem, ale to nie jest praca dla mnie – Mansi

+0

Co się dzieje w twoim? zadaj nowe pytanie i umieść w nim swój kod, a ja się obejrzę. umieść link do twojego pytania, aby go znaleźć. –

+0

Ten sam problem! Czy istnieje rozwiązanie? – mrroboaat

36

Miałem ten sam problem.

Oto obejście

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

Thx do How can I turnoff suggestions in EditText?

+0

To zabawne, że modyfikowanie inputType pozwala maxLength działać poprawnie, uniemożliwiając użytkownikom wpisywanie większej ilości buforów. Chciałbym, żeby to naprawili Google. –

+0

Wygląda na to, że do usunięcia liter wystarczy nacisnąć tylko tekstNieSugestions po naciśnięciu klawisza cofania. –

+0

To dziwne, ciekawe, czy Google wie o tym błędzie! – Skynet

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

miałem ten sam problem. Działa to doskonale, gdy dodajesz to:

android:inputType="textFilter" 

do twojego EditText.

+0

To jest poprawna odpowiedź. Dziękuję Ci –

0

Jeśli używałeś maxLength = 6, niektóre znaki wprowadzane przez Ciebie są dodawane w górnej części klawiatury, nazywane sugestiami. Więc kiedy usuniesz wprowadzone litery, tym razem najpierw usuniesz sugestie, a potem tekst w środku EditText. Do tego trzeba usunąć suggestions.just dodać

android:inputType="textNoSuggestions"` 

lub

android:inputType="textFilter" 

będzie usunąć te sugestie.

0

Dla mnie to rozwiązanie działa:

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

Jeśli chcesz zobaczyć etykietę licznika można użyć app:counterEnabled i android:maxLength, jak:

<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> 

NIE ustawić app:counterMaxLength na TextInputLayout ponieważ Spowoduje to konflikt z android:maxLength w wyniku niewidzialnych znaków po przekroczeniu limitu rozmiaru tekstu.

1

Możesz spróbować tego

EditText et = (EditText) findViewById(R.id.myeditText); 
    et.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(140) }); // maximum length is 140