Pytanie Jakiego androida: inputType powinienem użyć do wprowadzenia adresu IP?


Buduję małą aplikację na Androida, w której użytkownik wprowadza adres IP lub nazwę hosta do widżetu EditText. 90% czasu będą wpisywać adres IP, reszta czasu - nazwa hosta.

Tak więc naturalnie chcę zoptymalizować, aby ułatwić im wpisanie adresu IP, ale ważna jest możliwość zmiany na alfanumeryczne nazwy hostów.

Nie mogę znaleźć dobrego inputType. The numberDecimal początkowo wydawało się dobrym strzałem, ale pozwala tylko na jedną kropkę.

Idealnie, chciałbym zacząć od standardowej klawiatury, która miała ?123 wciśnięty przycisk.

Jak się tam dostanę?


44
2017-12-28 22:15


pochodzenie


Myślę, że jedyną opcją jest Tekst typu Edytuj tekst. Może być konieczne dodanie sprawdzania poprawności adresu IP. - kosa
nie zapominaj, że adresy IP zaczną się używać a-f i : w 1995… - BRPocock


Odpowiedzi:


Spróbuj użyć android:inputType="number", ale także ustaw android:digits="0123456789.". Pracuje dla mnie.


48
2018-02-03 22:06



Po prostu przeczytaj ponownie pytanie i zauważyłeś, że chciałbyś móc również podać nazwę hosta. Moja odpowiedź na to nie zadziała, ale wywoła standardową klawiaturę "numerową" i pozwoli na wiele kropek. - Bodacious
ty mogą dodaj małe i wielkie litery oraz łącznik do digits, ale jest trochę brudny. To będzie praca. - Bodacious
to jest idealne rozwiązanie - Jacky
Korzystanie z Androida 6.0, number nie pokazałem mi kropki podczas numberDecimal zrobił. - Eido95


Jeśli użyjesz inputType="phone" uzyskujesz dostęp do wyciętej klawiatury zawierającej cyfry i znak okresu - nie ogranicza to danych wejściowych w odniesieniu do liczby okresów, które można wprowadzić.

Proszę zobaczyć ta odpowiedź do sprawdzania poprawności podczas wprowadzania.


37
2017-07-18 14:29



Dzięki, myślę, że to dobra odpowiedź. Jest tak denerwujące, że można je wyposażyć w klawiaturę dla pola, które wymaga tylko takich liczb, jak adres IP. Walidacja jest oczywiście kluczowa, ale masz nawet link do tego! Sława. - Evan McEwen
W Androidzie Marshmallow 23 przycisk kropki na klawiaturze został zastąpiony przez * i #. Dlatego parametr inputType = "phone" nie powinien być używany w polach wprowadzania adresu IP. Użyj Androida: inputType = "numberDecimal" i android: digits = "0123456789." zamiast tego, jak sugerowano w innych pytaniach - Giorgio


Działa to idealnie na klawiaturze z liczbami i dziesiętnie po dodaniu Androida: inputType = "number | numberDecimal" i android: digits = "0123456789."

Przykład

 <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



idealne rozwiązanie - Parmendra Singh


Możesz użyć do tego własnego filtra wejściowego

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



Dzięki za to. Ta odpowiedź była dokładnie tym, czego potrzebowałem. - bastecklein


Użyj tego :

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

5
2017-11-03 21:24



W jaki sposób wprowadzić wiele miejsc dziesiętnych w tekście edycyjnym? - Surya Prakash Kushawah
@SuraaPrakashKushawah digits = "0123456789." mogę to zrobić ... - Richi
o tak, może być przyjacielem fb - Surya Prakash Kushawah


Myślę, że jedyną opcją jest ...

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

Możesz sprawdzić tekst dla 3 kropek, które zawiera adres IP


1
2017-12-28 22:18



Użytkownik chce, aby to samo pole tekstowe wymagało obsługi nazwy hosta i adresu IP, liczba może być zgodna tylko z numerem. Nawet IP nie może wejść z powodu DOTS. - kosa
"liczba" nie pozwala ci przełączać się na litery i nie pozwala ci wprowadzić kropki. - AngryHacker
Myślę, że twoją jedyną opcją jest Tekst. Następnie możesz sprawdzić adres IP pod kątem spójności, aby upewnić się, że miejsca dziesiętne są na miejscu. - coder_For_Life22


Myślę, że musisz użyć TextWatcher w celu weryfikacji, zarejestruj go przy pomocy TextView.addTextChangedListener () metoda i zastosowanie Pattern.DOMAIN_NAME i Pattern.IP_ADDRESS (Android 2.2+).

Widzieć:
Android: Jak mogę sprawdzić poprawność danych wejściowych EditText?
Sprawdzanie poprawności adresu IP w systemie Android


1
2017-12-28 22:26



To jest walidacja - mam tę część. Obecnie martwię się tylko tym, aby ułatwić użytkownikowi korzystanie z niego i nie pozwolić użytkownikowi na korzystanie z dodatkowych klawiszy. - AngryHacker


Możesz rozszerzyć DigitsKeyListener (źródło) i zmień funkcję filter () (sprawdzanie poprawności, które sprawdzi wzór ip lub nazwę hosta ciągu) i getInputType () na 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"/>

pracował dla mnie


1
2017-08-09 12:03



Za pomocą number|numberDecimal zezwala tylko na jedną kropkę. - tmm1
Dodaj android:digits="0123456789." także - saurabh yadav
Mój błąd. Użycie inputType + cyfry działa dobrze na Androidzie, ale nie na FireOS (Amazon Android fork), który ma niestandardową implementację okna dialogowego. - tmm1