2012-01-18 53 views
12

Có cách nào chỉ định số dòng tối đa cho số EditText không? Bằng cách đó tôi có nghĩa là tất cả các dòng văn bản, không chỉ những dòng hiển thị (như thuộc tính the android:maxLines được mô tả). Số dòng không được là 1, do đó, android:singleLine không phải là một tùy chọn.Đặt số dòng văn bản tối đa cho EditText

Trả lời

9

Bạn có thể sử dụng này:

android:singleLine="false" android:lines="5" 

Tôi không biết nếu đó là những gì bạn cần.

+4

số android: dòng là về đường nhìn thấy được. Tôi quan tâm đến các dòng văn bản. Nếu bạn đặt android: lines thành văn bản chỉnh sửa và bạn viết 10 dòng, bạn sẽ có 10 dòng văn bản, nhưng chỉ có 5 dòng hiển thị. Những gì tôi muốn là có tối đa 5 dòng văn bản. Sau dòng fift bạn không thể viết được nữa. Cảm ơn vi đa trả lơi. – Gratzi

+0

Được rồi, nhưng không có bản dựng trong "giới hạn hàng". Bạn phải tự mình làm điều đó. Có một chủ đề về stackoverflow với một mã mẫu, có thể bạn có thể sử dụng nó: http://stackoverflow.com/questions/7092961/edittext-maxlines-not-working-user-can-still-input-more-lines-than- thiết lập – MartijnG

+0

Tôi thấy bài đăng đó, nhưng sửa chữa chỉ xử lý khóa nhập và nó không phải là rất thanh lịch. Bạn xóa các phần của văn bản, ngay cả khi nó không phải là cần thiết để làm như vậy. – Gratzi

-1
android:maxLength="140" 

Tôi tin rằng điều này bằng một dòng, về lý thuyết bạn có thể thay đổi maxlength thành "700", có thể là 5 dòng. Tôi không chắc chắn về các con số nhưng logic đằng sau nó là hợp lệ.

+0

Điều đó không hợp lệ. Điều gì sẽ xảy ra nếu người dùng nhập 140x Enter? Sau đó anh tạo 140 dòng. – Sebi

+0

Sebi- những gì người dùng nhập không tạo ra số dòng tối đa. đây là mã chương trình đặt giới hạn. – Hounge

+0

Câu trả lời này không đúng với tôi. Như đề cập đến @Sebi, 140 ký tự có thể kéo dài nhiều dòng khác nhau, tùy thuộc vào ký tự nằm trong chuỗi. Ngoài ngắt dòng, có sự khác biệt lớn giữa chiều rộng 140 'của tôi và 140' m. – PaulrBear

0

Tôi tin rằng bạn có thể sử dụng mã này để kiểm tra số lượng dòng trong EditText,

editText.getLayout().getLineCount() > row-limit; 

Tốt bạn có thể sử dụng nó trong "afterTextChanged()" một TextWatcher Listener để không cho phép người sử dụng để nhập thêm nếu đã đạt đến giới hạn hàng.

edit.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if(editText.getLayout().getLineCount() > row-limit){ 
      //Code to stop edittext from being edited any further. 
      } 
}); 
5

bộ android: Maxlines = "2" trong xml và thêm:

edittext.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { } 
    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (null != edittext.getLayout() && edittext.getLayout().getLineCount() > 2) { 
      edittext.getText().delete(edittext.getText().length() - 1, edittext.getText().length()); 
     } 
    } 
}); 

là giải pháp cho tôi. Cùng bạn có thể làm cho 3,4 ... n hàng giới hạn cho edittext của bạn.

+0

Bạn có thể định dạng mã theo cách thích hợp và cũng có thể giải thích nó một chút nếu bạn có thể? –

+0

maxLines = "2" trong edittext của bạn trong xml - chỉ hiển thị 2 hàng cho người dùng, nhưng anh ấy có thể nhập nhiều hơn 2 hàng. Trong trường hợp này 1 hàng sẽ bị ẩn và người dùng sẽ thấy hàng thứ hai và thứ ba, v.v ..Trong phương thức afterTextChanged (Editable editable), chúng ta kiểm tra - biểu tượng mới có xuất hiện ở hàng thứ ba hay không, hoặc nó vẫn ở vị trí thứ hai hoặc thứ nhất. nếu biểu tượng xuất hiện ở hàng thứ ba - chúng tôi sẽ xóa nó. Vì vậy, văn bản không thể dài hơn 2 hàng trong văn bản. – fvolodimir

2
import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.EditText; 

public class EditTextLinesLimiter implements TextWatcher { 
    private EditText editText; 
    private int maxLines; 
    private String lastValue = ""; 

    public EditTextLinesLimiter(EditText editText, int maxLines) { 
     this.editText = editText; 
     this.maxLines = maxLines; 
    } 

    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
     lastValue = charSequence.toString(); 
    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (editText.getLineCount() > maxLines) { 
      int selectionStart = editText.getSelectionStart() - 1; 
      editText.setText(lastValue); 
      if (selectionStart >= editText.length()) { 
       selectionStart = editText.length(); 
      } 
      editText.setSelection(selectionStart); 
     } 
    } 
} 

Và sau đó:

editText.addTextChangedListener(new EditTextLinesLimiter(editText, 2)); 
Các vấn đề liên quan