안드로이드 TextView에서 프로그래밍 방식으로 maxLength를 설정하는 방법은 무엇입니까?


176

레이아웃에서 하드 코딩하고 싶지 않으므로 프로그래밍 방식으로 maxLength속성을 설정 TextView하고 싶습니다. 에 set관련된 방법을 볼 수 없습니다 maxLength.

누구든지 이것을 달성하는 방법을 안내 할 수 있습니까?

답변:


363

그런 것이어야합니다. 그러나 textview에는 사용하지 않고 edittext 만 사용하십시오.

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

119
이를 바탕으로 이동하는 것이 훨씬 깨끗할 수 있습니다. tv.setFilters (new InputFilter [] {new InputFilter.LengthFilter (10)});
Mark D

43
그냥 "maxLength ()"라고 말할 수 없었습니다. 아니, 아니, 아니 .. 너무 쉬울 것입니다. 그들은 그것을 요약해야했다.
angryITguy

3
그러나 이것은 이전 필터를 재설정합니다.
crgarridos

19
Kotlin을 사용하면 더 깔끔하게 만들 수 있습니다. editText.filters = arrayOf (InputFilter.LengthFilter (10))
Elvis Chidera

5
editText.filters = arrayOf(*editText.filters, InputFilter.LengthFilter(10))kotlin으로 오래된 필터 유지
Peter Samokhin

85

이 시도

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

1
이것은 나를 위해 작동하지만 Android 5.1에서는 여전히 입력 필드에 "보이지 않는"문자를 계속 입력 할 수 있습니다. 그러나 그들은 텍스트 제안에 표시됩니다. 그리고 마지막에 문자를 삭제하려고 할 때.
Radon8472

11
이것은 "또 다른 방법"이 아닙니다. 이것은 첫 번째 답변의 짧은 버전입니다.
Ninja Coding

21

쉬운 방법 제한 텍스트 문자 편집 :

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

16

Kotlin을 사용하는 사람들을 위해

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

그런 다음 간단한 editText.limitLength (10)를 사용할 수 있습니다.


1
왜 함수 이름으로 setMaxLength를 사용하지 않습니까? 당신은 이것을 textview에도 적용 할 수 있습니다 ... thanks +1 :)
crgarridos

limitLength와 함께 진행하는 limitDecimalPlaces, limitNumberOnly, limitAscii 패턴을 따르는 다른 메소드가 있습니다.
Kevin

1
filters = filters.plus (InputFilter.LengthFilter (max)) 기존 항목을 덮어 쓰지 마십시오
ersin-ertan

7

주앙 카를로스 코 틀린를 사용했다 :

editText.filters += InputFilter.LengthFilter(10)

일부 장치의 이상한 동작에 대해서는 https://stackoverflow.com/a/58372842/2914140참조 하십시오 .

(에 추가 android:inputType="textNoSuggestions"하십시오 EditText.)


1
내 경우처럼 MaxLength를 10에서 20으로 변경하는 것처럼 나중에 길이를 변경하려는 경우 버그가 발생하지만 코드에서 필터로 필터에 남아있는 MaxLength 10 bcus를 배열에 추가하면 최대 길이는 10,20 두 개입니다.
Nikhil

@ Nikhil, 당신에게 동의 감사합니다! 예,이 경우 먼저 하나의 필터 ( LengthFilter(10))를 제거한 다음 다른 필터 ( )를 추가해야 LengthFilter(20)합니다.
CoolMind

6

Kotlin 및 이전 필터를 재설정하지 않은 경우 :

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

나는 이것을 위해 간단한 확장 기능을 만들었습니다.

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

내가 찾은 최고의 솔루션

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

길이는 제한되지 EditText않지만 10 번째 기호 (한 번) 이후의 텍스트 는 잘 립니다.
CoolMind

0

원래 입력 필터를 유지하려면 다음과 같이하면됩니다.

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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.