Android TextView'da programlı olarak maxLength nasıl ayarlanır?


177

Düzende sabit kodlamak istemiyorum gibi programsal olarak maxLengthözelliğini ayarlamak TextViewistiyorum. setİle ilgili herhangi bir yöntem göremiyorum maxLength.

Bunu başarmak için bana rehberlik eden var mı?

Yanıtlar:


364

Böyle bir şey olmalı. ancak metin görünümü için hiç kullanmadı, yalnızca düzenleme metni:

TextView tv = new TextView(this);
int maxLength = 10;
InputFilter[] fArray = new InputFilter[1];
fArray[0] = new InputFilter.LengthFilter(maxLength);
tv.setFilters(fArray);

119
Buna dayanarak gitmek daha temiz olabilir: tv.setFilters (new InputFilter [] {new InputFilter.LengthFilter (10)});
Mark D

43
Sadece "maxLength ()" diyemezdim .. hayır, hayır, hayır .. bu çok kolay olurdu. soyut yapmak zorundaydılar .. yay!
angryITguy

3
Ama bu önceki filtrelerinizi sıfırlayacak, değil mi?
crgarridos

20
Kotlin ile daha temiz yapabilirsiniz: editText.filters = arrayOf (InputFilter.LengthFilter (10))
Elvis Chidera

5
editText.filters = arrayOf(*editText.filters, InputFilter.LengthFilter(10))kotlin ile eski filtreleri sakla
Peter Samokhin

85

Bunu dene

int maxLengthofEditText = 4;    
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLengthofEditText)});

1
Bu benim için çalışıyor, ancak Android 5.1'de hala harfleri yazmaya devam edebilirsiniz, giriş alanında "görünmez" dir. Ancak metin teklifinde gösterilirler. Ve sonunda harfleri silmeye çalıştığınızda.
Radon8472

11
Bu "başka bir yol" değildir, bu aynı şekilde ilk cevabın kısa versiyonudur.
Ninja Kodlama

21

Kolay yol sınırı metin karakterini düzenleme :

EditText ed=(EditText)findViewById(R.id.edittxt);
ed.setFilters(new InputFilter[]{new InputFilter.LengthFilter(15)});

16

Kotlin'i kullananlar için

fun EditText.limitLength(maxLength: Int) {
    filters = arrayOf(InputFilter.LengthFilter(maxLength))
}

O zaman basit bir editText.limitLength (10) kullanabilirsiniz.


1
neden işlev adı olarak setMaxLength kullanmıyorsunuz? Bunu textview'e de uygulayabilirsiniz ... teşekkürler +1 :)
crgarridos

Bu modeli takip diğer yöntemler var: limitDecimalPlaces, limitNumberOnly, limitAscii limitLength ile birlikte gitmek.
Kevin

1
filters = filters.plus (InputFilter.LengthFilter (max)) Mevcut olanların üzerine yazma
ersin-ertan

7

As João Carlos Kotlin kullanımda, şunları söyledi:

editText.filters += InputFilter.LengthFilter(10)

Ayrıca, bazı cihazların tuhaf davranışı hakkında https://stackoverflow.com/a/58372842/2914140 adresine bakın .

( android:inputType="textNoSuggestions"Kendinize ekleyin EditText.)


1
Benim durumumda MaxLength 10'dan 20'ye değiştirdiğim gibi uzunluğu değiştirmek isterseniz onun yaratma hatası, ancak kodda olduğu gibi, filtre eklediğimizde, artık dizide MaxLength 10 bcus setini ayarladık, şimdi 10,20 iki maksimum uzunluğa sahibiz.
Nikhil

@Nikhil, sana katılıyorum, teşekkürler! Evet, bu durumda önce bir filtreyi ( LengthFilter(10)) kaldırmalı ve ardından başka bir ( LengthFilter(20)) eklemeliyiz .
CoolMind

6

Kotlin için ve önceki filtreleri sıfırlamadan:

fun TextView.addFilter(filter: InputFilter) {
  filters = if (filters.isNullOrEmpty()) {
    arrayOf(filter)
  } else {
    filters.toMutableList()
      .apply {
        removeAll { it.javaClass == filter.javaClass }
        add(filter)
      }
      .toTypedArray()
  }
}

textView.addFilter(InputFilter.LengthFilter(10))

1

Bunun için basit bir uzantı işlevi yaptım

/**
 * maxLength extension function makes a filter that 
 * will constrain edits not to make the length of the text
 * greater than the specified length.
 * 
 * @param max
 */
fun EditText.maxLength(max: Int){
    this.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(max))
}

editText?.maxLength(10)

0
     AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("Title");


                    final EditText input = new EditText(this);
                    input.setInputType(InputType.TYPE_CLASS_NUMBER);
//for Limit...                    
input.setFilters(new InputFilter[] {new InputFilter.LengthFilter(3)});
                    builder.setView(input);

0

bulduğum en iyi çözüm

textView.setText(text.substring(0,10));

Uzunluğunu sınırlamaz EditText, ancak 10. sembolden sonra metni keser (bir kez).
CoolMind

0

Orijinal giriş filtresini korumak için bunu şu şekilde yapabilirsiniz:

InputFilter.LengthFilter maxLengthFilter = new InputFilter.LengthFilter(100);
        InputFilter[] origin = contentEt.getFilters();
        InputFilter[] newFilters;
        if (origin != null && origin.length > 0) {
            newFilters = new InputFilter[origin.length + 1];
            System.arraycopy(origin, 0, newFilters, 0, origin.length);
            newFilters[origin.length] = maxLengthFilter;
        } else {
            newFilters = new InputFilter[]{maxLengthFilter};
        }
        contentEt.setFilters(newFilters);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.