Soru Yalnızca alfanümerik karakterleri kabul etmek için EditText nasıl kısıtlanır


Nasıl kısıtlayabilirim EditText yalnızca alfasayısal karakterleri kabul etmek için, hem küçük harf hem de büyük harf karakterleri EditText?

<EditText
    android:id="@+id/userInput"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    android:minLines="3" >

    <requestFocus />
</EditText>

Bir kullanıcı "abcd" küçük harfiyle yazıyorsa, EditText klavyeyi büyük harfle sınırlamaya gerek kalmadan otomatik olarak "ABCD" göstermelidir.


44
2018-04-22 06:50


Menşei


editText.setKeyListener (DigitsKeyListener.getInstance ("abcdefghijklmnopqrstuvwxyz1234567890")); - Nepster


Cevaplar:


XML'de şunu ekleyin:

 android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "

89
2018-04-22 06:52



bu durumda başka bir şey girersem bu otomatik olarak çoklu karakter girer - hitesh141
Kullanıcının yalnızca alfabeleri veya sadece tek bir alanı girmesini kısıtlayabilmem için herhangi bir yol var mı? - Ravi Bhandari
@Ravi sadece sayıları kaldırır mı? Tek boşluk için sonunda boşluk bırak - user2968401
Bu, OP'nin istediği büyük harfli karakterlere izin vermiyor. - Steven Byle
Bu çözüm artı textAllCaps="true" şeyi yapmalı - Mino


EditText, yalnızca alfanümerik karakterleri kabul etmek için nasıl kısıtlanır? Böylelikle kullanıcının yazdığı küçük harf veya büyük harf tuşuyla, EditText büyük harfle gösterilir.

InputFilter Çözüm iyi çalışır ve daha iyi bir tahıl seviyesinde girişi filtrelemek için tam kontrol sağlar. android:digits. filter() yöntem dönmelidir null tüm karakterler geçerliyse veya CharSequence Bazı karakterler geçersiz ise sadece geçerli karakterlerin. Birden çok karakter kopyalanır ve yapıştırılırsa ve bazıları geçersizse, yalnızca geçerli karakterler tutulmalıdır.

public static class AlphaNumericInputFilter implements InputFilter {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {

        // Only keep characters that are alphanumeric
        StringBuilder builder = new StringBuilder();
        for (int i = start; i < end; i++) {
            char c = source.charAt(i);
            if (Character.isLetterOrDigit(c)) {
                builder.append(c);
            }
        }

        // If all characters are valid, return null, otherwise only return the filtered characters
        boolean allCharactersValid = (builder.length() == end - start);
        return allCharactersValid ? null : builder.toString();
    }
}

Ayrıca, InputFilter, diğerlerinin üzerine yazmamaya dikkat etmelisiniz. InputFilters senin üstünde ayarla EditText; bunlar XML’de android:maxLength. Ayrıca siparişi de dikkate almalısınız. InputFilters ayarlanır, onlar bu sırayla uygulanır. Neyse ki, InputFilter.AllCaps zaten var, bu nedenle alfanümerik filtrenizle uygulandığında tüm alfasayısal metinler saklanacak ve büyük harfe dönüştürülecektir.

    // Apply the filters to control the input (alphanumeric)
    ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(editText.getFilters()));
    curInputFilters.add(0, new AlphaNumericInputFilter());
    curInputFilters.add(1, new InputFilter.AllCaps());
    InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
    editText.setFilters(newInputFilters);

20
2017-12-22 15:49



Bu kabul edilen cevap olmalı. Bu ve diğer sayfalarda önerilen çözümleri denedim ve sadece bu çözüm tüm aygıtlarımı mükemmel şekilde kapsadı (Samsung özellikle can sıkıcı olanı). Bazıları bana SADECE sayı girdisi verdi, bazıları sadece girişteki 0 karakterin ilk uzunluğu hakkında şikayette bulunan herhangi bir şeyi yazmakta başarısız oldu. editText.setFilters(new InputFilter[]{new InputFilter.AllCaps(), alphanumericFilter}); - ZooS
@ZooS senin shorthand herhangi bir var olanın üzerine yazacaktır InputFilters zaten EditText. Lütfen okumak kod bloğunun hemen üstünde yaptığım açıklama, filtrenin ayarlanması çok özel nedenlerle bu şekilde yapılır. - Steven Byle
Kötüyüm, açıklamadan tam olarak okunmadı, haklısın. Bu benim görüşüme göre en iyi çözüm. - ZooS
Çalışmadı. Kullanıcı geçerli olmayan bir karakter girdiğinde, düzenleme metnindeki geçerli metin ikiye katlanır !! - Felipe Ribeiro R. Magalhaes
Bir satırda iki sayı yazdığınızda hata oluşur - Felipe Ribeiro R. Magalhaes


Çok fazla kişiselleştirme istemiyorsanız, android'de eklemek istediğiniz tüm karakterleri içeren basit bir hiledir.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

Bu, Caps & Small harfleriyle alfasayısal değerleri kabul etmek için çalışmalıdır.


9
2017-10-31 01:37



Bu çok dilli uygulama için başarısız olur. - MobileEvangelist


Bunu kullan:

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
android:inputType="textCapCharacters"

Kullanmayı denedim textAllCaps="true" Bu soruya verilen yanıtın bir yorumunda önerildiği gibi, ancak beklendiği gibi çalışmadı.


6
2018-06-08 07:31



Bu çok dilli uygulama için başarısız olur. - MobileEvangelist


bunu dene:

private void addFilterToUserName()
    {

        sign_up_display_name_et.setFilters(new InputFilter[] {
                new InputFilter() {
                    public CharSequence filter(CharSequence src, int start,
                                               int end, Spanned dst, int dstart, int dend) {
                        if(src.equals("")){ // for backspace
                            return src;
                        }
                        if(src.toString().matches("[a-zA-Z 0-9]+")){
                            return src;
                        }
                        return "";
                    }
                }
        });
    }

4
2018-06-29 07:58





Bunun için herhangi bir normal ifade yazmak istemezsiniz, sadece Metni Düzenle metninize XML özellikleri ekleyebilirsiniz

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
android:inputType="textCapCharacters"

PAN Kart doğrulaması için Mükemmel Çalışma Test edildi.


2
2018-04-25 10:36



Zaman kazandıran! Çok teşekkür ederim. - Karan Thakkar
Ayrıca Araç Numarası Doğrulama için çalıştı. - Aakanksha
Doğru çalışmıyor. Geçersiz (özel) karakterler girildiğinde arızalanır. - Salman Khalid


Bu benim için çalışıyor:

android:inputType="textVisiblePassword"


1
2018-03-13 03:38