Soru IP adresi girmek için hangi android: inputType kullanmalıyım?


Kullanıcının bir EditText widget'ına bir IP adresi veya bir hostname gireceği küçük bir Android uygulaması yapıyorum. Bir IP adresi girecekleri zamanın% 90'ı, kalan zaman - bir ana bilgisayar adı.

Doğal olarak, bir IP adresi girmeyi kolaylaştıracak şekilde optimize etmek istiyorum, ancak ana makine adı girişi için alfa sayısallarına geçme yeteneği önemlidir.

İyi bir inputType bulmuyorum. numberDecimal başlangıçta iyi bir atış gibi görünüyordu, ama sadece bir noktaya izin veriyor.

İdeal olarak, standart bir klavye ile başlamak istiyorum. ?123 düğmesine basıldı.

Oraya nasıl giderim?


44
2017-12-28 22:15


Menşei


Bence tek seçenek EditText tip Metin. IP için doğrulama eklemeniz gerekebilir. - kosa
unutma, IP adresleri kullanmaya başlayacak a-f ve : 1995'te… - BRPocock


Cevaplar:


Kullanmayı deneyin android:inputType="number"ama aynı zamanda android:digits="0123456789.". Benim için çalışıyor.


48
2018-02-03 22:06



Sadece soruyu tekrar okuyun ve aynı zamanda bir hostname girebilmek istediğini fark ettiniz. Cevabım bunun için çalışmaz, ancak standart "sayı" klavyesini getirir ve çoklu noktalara izin verir. - Bodacious
Sen kutu alt ve büyük harf ve tire eklemek digitsama biraz dağınık. O irade Çalışsa da. - Bodacious
bu mükemmel çözüm - Jacky
Android 6.0'ı kullanıyor, number bana noktayı göstermedi numberDecimal yaptı. - Eido95


Eğer kullanırsan inputType="phone" Sayıları ve bir Periyot karakterini içeren bir aşağı klavyeye erişim kazanırsınız - bu, girişi girebileceğiniz Dönemlerin miktarına göre kısıtlamaz.

Bakınız bu cevap girilirken doğrulama için.


37
2017-07-18 14:29



Teşekkürler bu iyi bir cevap olduğunu düşünüyorum. Sadece bir IP Adresi gibi numaralar gerektiren bir alan için bir klavyeyle yükseltilmesi çok can sıkıcı. Doğrulama anahtarı açıktır, ancak bunun için bir link bile vermişsinizdir! Kudos. - Evan McEwen
Android Marshmallow 23'te klavyedeki dönem düğmesi * ve # ile değiştirildi. Bu nedenle, IP adresi giriş alanları için inputType = "telefon" kullanılmamalıdır. Android'i kullan: inputType = "numberDecimal" ve android: digits = "0123456789." diğer sorularda önerildiği gibi - Giorgio


Bu android ekleyerek sayıları ve ondalık ile mükemmel klavye çalışır: inputType = "number | numberDecimal" ve android: digits = "0123456789."

Örnek

 <EditText
    android:id="@+id/ip_address"
    android:inputType="number|numberDecimal"
    android:digits="0123456789."
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

17
2017-10-10 02:06



mükemmel çözüm - Parmendra Singh


Bunun için kendi giriş filtrenizi kullanabilirsiniz.

final EditText text = new EditText(ServerSettings.this);
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start,
            int end, Spanned dest, int dstart, int dend) {
        if (end > start) {
            String destTxt = dest.toString();
            String resultingTxt = destTxt.substring(0, dstart) +
            source.subSequence(start, end) +
            destTxt.substring(dend);
            if (!resultingTxt.matches ("^\\d{1,3}(\\." +
                    "(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) { 
                return "";
            } else {
                String[] splits = resultingTxt.split("\\.");
                for (int i=0; i<splits.length; i++) {
                    if (Integer.valueOf(splits[i]) > 255) {
                        return "";
                    }
                }
            }
        }
    return null;
    }
};
text.setFilters(filters);

13
2018-04-05 10:00



Bunun için teşekkürler. Bu cevap tam ihtiyacım olan şeydi. - bastecklein


bunu kullan :

<EditText
    android:id="@+id/txtIP"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="0123456789."
 />

5
2017-11-03 21:24



Metni düzenlemekte nasıl birden fazla ondalık girebilirsiniz? - Surya Prakash Kushawah
@SuryaPrakashKushawah basamakları = "0123456789." bunu yapabilirsin... - Richi
oh evet fb'nin arkadaşı olabilir - Surya Prakash Kushawah


Tek seçeneğiniz bence ..

EditText android:inputType="text" ... />

IP adresini içeren 3 nokta için Metin kontrol edebilirsiniz.


1
2017-12-28 22:18



Kullanıcı, ana bilgisayar adını ve IP'yi işlemek için aynı metin kutusunun girmesini ister, sayı yalnızca sayıya dayanabilir. Hatta IP DOTS yüzünden giremez. - kosa
"sayı" harflere geçmenize izin vermez ve bir nokta girmesine izin vermez. - AngryHacker
Tek seçeneğiniz Metin. Ondalıkların yerinde olduğundan emin olmak için tutarlılık için IP adresini kontrol edebilirsiniz. - coder_For_Life22


Kullanman gerektiğini düşünüyorum TextWatcher doğrulama için TextView.addTextChangedListener () yöntem ve kullanım Pattern.DOMAIN_NAME ve Pattern.IP_ADDRESS (Android 2.2+).

Görmek:
Android: EditText girdisini nasıl doğrulayabilirim?
Android'de IP doğrulama


1
2017-12-28 22:26



Bu doğrulamadır - o kısmı aldım. Ben sadece şu anda kullanıcı üzerinde kolaylaştırarak ve kullanıcının ekstra tuşlara dokunmamasından endişe duyuyorum. - AngryHacker


DigitsKeyListener'ı genişletebilirsiniz (kaynak) ve filter () işlevini (ip desenini veya dize ana makine adını denetleyen doğrulama) ve getInputType () öğesini return InputType.TYPE_CLASS_PHONE;


1
2017-12-28 22:46





<EditText
    android:id="@+id/ip_address"
    android:inputType="number|numberDecimal"
    android:digits="0123456789."
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

benim için çalıştı


1
2017-08-09 12:03



kullanma number|numberDecimal sadece bir noktaya izin verir. - tmm1
eklemek android:digits="0123456789." çok - saurabh yadav
Benim hatam. İnputType + basamaklarını kullanmak Android'de iyi çalışır, ancak özel bir iletişim uygulamasına sahip olan FireOS (Amazon Android çatalı) değildir. - tmm1