2012-01-18 15 views
12

EditText için azami satır sayısını belirleme yolu var mı? Bununla, sadece görünür olanları değil, tüm metin satırlarını kastediyorum (the android:maxLines özniteliği açıklanmıştır). Satır numarası 1 olmamalıdır, bu nedenle android:singleLine bir seçenek değildir.Bir EditText için en fazla metin satırını ayarla

cevap

9

Bu kullanabilirsiniz:

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

neye ihtiyacınız yaparsa bilmiyorum.

+4

sayılı robot: çizgileri görünür çizgiler ile ilgilidir. Metin çizgileriyle ilgileniyorum. Android: satırlarını bir düzenleme metnine ayarlarsanız ve 10 satır yazarsanız, 10 satırlık bir metin olacak, ancak sadece 5 tane görünür olacak. İstediğim en fazla 5 satırlık metne sahip olmak. Elli çizgiden sonra artık yazamazsınız. Cevap için teşekkürler. – Gratzi

+0

Tamam, ancak "satır sınırlayıcıda" yapı yok. Bunu kendin yapmalısın. Örnek kod ile yığın akışında bir konu var, belki bunu kullanabilirsiniz: http://stackoverflow.com/questions/7092961/edittext-maxlines-not-working-user-can-still-input-more-lines-than- – MartijnG

+0

'u ayarlayın Bu yazıyı gördüm, ancak düzeltme yalnızca enter tuşuna basıyor ve çok zarif değil. Gerekmiyor olsa bile, metin kısımlarını silersiniz. – Gratzi

-1
android:maxLength="140" 

Ben teoride 5 satır olacak MAXLENGTH için "700" değiştirebilir, bu bir çizgiye eşit olduğuna inanıyoruz. Numaralardan tam olarak emin değilim ama arkasındaki mantık geçerli. Sana EDITTEXT içinde satır sayısını kontrol etmek için bu kodu kullanabilirsiniz inanıyoruz

+0

Bu geçerli değil. Kullanıcı 140x Giriyorsa Ne Yapmalı? O zaman 140 Çizgi oluşturur. – Sebi

+0

Sebi- kullanıcının girdiği maksimum satır sayısını oluşturmaz. Bu, limiti belirleyen program kodudur. – Hounge

+0

Bu cevap bana uygun gelmiyor. @ Sebi'den de anlaşılacağı gibi, 140 karakter dizede hangi karakterlerin olduğuna bağlı olarak çok çeşitli çizgiler içerebilir. Hat kesintilerinin yanı sıra, 140 'i ve 140' m'lerin genişliği arasında büyük bir fark var. – PaulrBear

0

,

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

Tercihen eğer daha ileri giren kullanıcıya izin vermemek için bir TextWatcher Dinleyici "afterTextChanged()" olarak kullanabilecektir satır sınırına ulaşıldı.

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

seti android: maxLines = "2" xml ve ekleyin:

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()); 
     } 
    } 
}); 

benim için bir çözümdür. Aynı editionxt için 3,4 ... n satır sınırı için yapabilirsiniz.

+0

Kodu uygun bir şekilde biçimlendirebilir ve yapabilirseniz biraz açıklayabilir misiniz? –

+0

maxLines = xml olarak edittext içinde "2" - kullanıcı için sadece 2 satır görünür, ancak daha sonra 2 satır yazabilir. Bu durumda 1 satır gizlenecek ve kullanıcı ikinci ve üçüncü sırayı görecek.AfterTextChanged (Düzenlenebilir düzenlenebilir) yönteminde kontrol ederiz - üçüncü sırada yeni sembol belirdi, ya da hala ikinci ya da ilk sırada. sembol üçüncü sırada görünürse - onu sileriz. Dolayısıyla, metin edittext'te 2 satırdan daha uzun olamaz. – 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); 
     } 
    } 
} 

Sonra:

editText.addTextChangedListener(new EditTextLinesLimiter(editText, 2)); 
İlgili konular