2011-04-05 10 views
6

Sadece bir karakter ve sadece karakter (harf/alfa) kabul eden bir EditText yapmam gerekiyor. Ve eğer kullanıcı diğer karakterleri girerse, mevcut olanı değiştirmelidir (izin verilen 1 sembol ile metin girişi üzerine yazma yöntemi gibi).EditText'te sadece 1 karaktere izin verin ve kullanıcı girdiğinde her zaman üzerine yazın

  1. Özelliklerin metnin maksimum uzunluğunu nasıl ayarlayacağımı biliyorum. Ancak değerini 1 olarak ayarlarsanız, kullanıcı mevcut bir silmeden önce başka bir char eklenemez. Fakat mevcut char'i manuel olarak silme işlemine gerek duymadan yeni girilen ile değiştirmek istiyorum. Bu nasıl yapılır?

  2. Yalnızca EditText numaralı haldeki basamaklara izin vermek için özelliği nasıl ayarlayacağımı biliyorum, ancak I yalnızca karakterlerin nasıl izin verileceğini öğrenemiyor. Yani ikinci soru sadece EditText içinde karakterlere nasıl izin verilir?

anda Aşağıdaki kod ile maksimum metin boyutu = 2 olan bir EditText kullanıyorum:

final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter); 
editLetter.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     if (s!=null && s.length()>1){ 
      editLetter.setText(s.subSequence(1, s.length())); 
      editLetter.setSelection(1); 
     } 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 

    } 

    public void onTextChanged(CharSequence s, int start, int before, 
     int count) { 

    } 
}); 

nokta, bir kullanıcı, ikinci kömürü girdiğinde, ilk silinmelidir . Metin boyutu 2'ye ayarlandığında, kullanıcının daha önce girildikten sonra başka bir karakter girmesi sağlanır.

Gerçekten nasıl çalıştığını anlamıyorum ama yapıyor :). Ve ek olarak EditText numaralı imleci son noktaya işaret etmem gerekti çünkü her zaman bir şey girmeyi başaramayacak şekilde başlıyor. Neden bu da olmadı.

Bu çözümün ana noktası, EditText boyutunda bir 2 karakterlik alana sahip olması, ancak 1 boyutlu boyutta olmasını istiyorum. Ve harflerin (chars/alpha) yanı sıra herhangi bir şey girmeye izin verir ve ben chars dışında bir şey istiyorum.

public void afterTextChanged(Editable s) { 
    int iLen=s.length(); 
    if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){ 
     s.delete(iLen-1, iLen); 
     return; 
    } 
    if (iLen>1){ 
     s.delete(0, 1); 
    } 
} 

Ben Selection.setSelection kullanarak bu durumda gerekli olmadığını fark ettik: sgarman ve Character.isLetter() işlevi tarafından sağlanan tavsiye kullanarak

, afterTextChanged yöntem şimdi bu şekilde görünüyor. Şimdi sadece harflerin girilmesine izin veren bir filtreye sahip. Neredeyse istediğim cevap. Tek bir şey, 1 sembol boyutunda EditText ile nasıl yapılacağıdır?

cevap

3

Dene:

s.delete(0, 1); 
Selection.setSelection(s, s.length()); 
+0

tam olarak aynıdır. uzunluk = 1 ile hiç çalışmıyor. ET (editLetter) için bir bağlantı kullanmadan sadece alternatif bir yoldur. Bahşiş için teşekkürler ama cevap değil. – Stan

+0

@Stan neden bunu kabul ettiniz ;-) –

+0

Lütfen sorumu tamamen okuyun ve nedenini bulacaksınız. – Stan

9

Sen düzen xml dosyasına bu tek satırı ekleyebilirsiniz ve kesin

android:maxLength="1" 

Eğer bir mülk olarak eklemek gerekir için android şeyler yapacak EditText elemet örneğin

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="text" 
    android:maxLength="1" > 

aynı sorunla karşı karşıya ve bu daha kolay çözüm, biliyorum bulundu Bu eski bir soru, ama bu bağlantıyı açanların daha kolay olmasını sağlamak için cevabımı koymaya karar verdim.

Ve ben bu cevabından alıntılanan, bu blog'un sahibine teşekkür etmemeliydim!

+5

Lütfen sorumu daha dikkatli bir şekilde okuyun - sadece 1 karakterlik sınırla ilgili değil. Yolun sadece işe yaramayacaksın. – Stan

2

Aynı şeyi yapmak istedim ve kodunuzu afterTextChanged (Düzenlenebilir) olarak kullandım ve bunun gibi editText üzerinde bir filtre ayarladım.

editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)}); 

İstediğimiz gibi çalıştı. Metin uzunluğu = 2 olan