Làm cách nào để thiết lập lập trình maxLpm trong Android TextView?


176

Tôi muốn đặt maxLengththuộc tính theo chương trình TextViewvì tôi không muốn mã cứng nó trong bố cục. Tôi không thể thấy bất kỳ setphương pháp nào liên quan đến maxLength.

Bất cứ ai có thể hướng dẫn tôi làm thế nào để đạt được điều này?

Câu trả lời:


363

Nên là một cái gì đó như thế. nhưng không bao giờ sử dụng nó cho textview, chỉ edittext:

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

119
Dựa vào đó, có thể sẽ dễ dàng hơn nhiều: tv.setFilters (new InputFilter [] {new InputFilter.LdropsFilter (10)});
Đánh dấu

43
Không thể chỉ nói "maxLạng ()" .. không, không, không .. điều đó quá dễ dàng. họ phải làm cho nó trừu tượng .. yay!
tức giận vào

3
Nhưng điều này sẽ thiết lập lại các bộ lọc trước đó của bạn, không?
crgarridos

19
Với Kotlin, bạn có thể làm cho nó sạch hơn: editText.filters = ArrayOf (InputFilter.LdropsFilter (10))
Elvis Chidera

5
editText.filters = arrayOf(*editText.filters, InputFilter.LengthFilter(10))giữ các bộ lọc cũ với kotlin
Peter Samokhin

85

Thử cái này

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

1
Điều này hoạt động với tôi, nhưng trong Android 5.1, bạn vẫn có thể tiếp tục nhập các chữ cái, là "vô hình" trong trường đầu vào. Nhưng chúng được thể hiện trong đề xuất văn bản. Và khi bạn cố gắng xóa các chữ cái ở cuối.
Radon8472

11
Đây không phải là "cách khác", đây là phiên bản ngắn của câu trả lời đầu tiên, theo cách tương tự.
Mã hóa Ninja

21

Cách dễ dàng giới hạn chỉnh sửa ký tự văn bản :

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

16

Dành cho những bạn đang sử dụng Kotlin

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

Sau đó, bạn chỉ có thể sử dụng một chỉnh sửa đơn giản.limitLpm (10)


1
Tại sao không sử dụng setMaxLpm làm tên hàm? bạn cũng có thể áp dụng điều này cho textview ... cảm ơn +1 :)
crgarridos

Tôi có các phương thức khác tuân theo mô hình này: limDecimalPftime, limitNumberOnly, limAscii để đi cùng với giới hạn bước sóng.
Kevin

1
bộ lọc = bộ lọc.plus (InputFilter.LdropsFilter (max)) Không ghi đè lên những cái hiện có
ersin-ertan

7

Như João Carlos đã nói, trong Kotlin sử dụng:

editText.filters += InputFilter.LengthFilter(10)

Xem thêm https://stackoverflow.com/a/58372842/2914140 về một số thiết bị hành vi lạ.

(Thêm android:inputType="textNoSuggestions"vào của bạn EditText.)


1
Nó tạo ra lỗi nếu bạn muốn thay đổi độ dài sau như trong trường hợp của tôi, tôi thay đổi MaxLạng từ 10 thành 20, nhưng như trong mã, chúng tôi thêm bộ lọc, nó vẫn đặt MaxLpm 10 bcus trong mảng, chúng tôi có 10,20 hai độ dài tối đa.
Nikhil

@Nikhil, đồng ý với bạn, cảm ơn! Có, trong trường hợp này, trước tiên chúng ta nên xóa một bộ lọc ( LengthFilter(10)) và sau đó thêm bộ lọc khác ( LengthFilter(20)).
CoolMind

6

Đối với Kotlin và không đặt lại các bộ lọc trước đó:

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

Tôi đã thực hiện một chức năng mở rộng đơn giản cho cái này

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

giải pháp tốt nhất tôi tìm thấy

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

Nó sẽ không giới hạn độ dài EditText, nhưng cắt một văn bản sau ký hiệu thứ 10 (một lần).
CoolMind

0

Để giữ bộ lọc đầu vào ban đầu, bạn có thể làm theo cách này:

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.