web-dev-qa-db-ger.com

Welcher Android: inputType sollte ich zur Eingabe einer IP-Adresse verwenden?

Ich baue eine kleine Android-App, bei der der Benutzer eine IP-Adresse oder einen Hostnamen in ein EditText-Widget eingibt. In 90% der Fälle geben sie eine IP-Adresse ein, während der Rest der Zeit ein Hostname ist.

Ich möchte natürlich optimieren, um es ihnen leicht zu machen, eine IP-Adresse einzugeben, aber die Möglichkeit, für die Eingabe des Hostnamens zu Alpha-Zahlen zu wechseln, ist wichtig.

Ich kann anscheinend keinen guten inputType finden. Die numberDecimal erschien anfangs wie ein guter Schuss, erlaubt aber nur einen Punkt. 

Im Idealfall möchte ich mit einer Standardtastatur beginnen, bei der die ?123-Taste gedrückt wurde.

Wie komme ich dort hin?

47
AngryHacker

Versuchen Sie es mit Android:inputType="number", aber setzen Sie auch Android:digits="0123456789.". Funktioniert bei mir.

52
Bodacious

Wenn Sie inputType="phone" verwenden, erhalten Sie Zugriff auf eine reduzierte Tastatur, die Zahlen und ein Punktzeichen enthält. Dies beschränkt die Eingabe jedoch nicht auf die Anzahl der Perioden, die Sie eingeben können.

Bitte sehen Sie diese Antwort für die Bestätigung während der Eingabe.

39
Graeme

Dies funktioniert perfekt Tastatur mit Zahlen und Dezimalzahlen durch Hinzufügen von Android: inputType = "number | numberDecimal" und Android: Ziffern = "0123456789".

Beispiel

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

Sie können dafür einen eigenen Eingabefilter verwenden

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
SKT

benutze das :

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

arbeitete für mich

2
saurabh yadav

Sie können DigitsKeyListener ( source ) erweitern und die filter () - Funktion ändern (Überprüfung, die entweder das IP-Muster oder einen String-Hostnamen überprüft) und getInputType () in return InputType.TYPE_CLASS_PHONE;

1
Jana

Ich denke, deine einzige Möglichkeit ist ..

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

Sie können den Text auf 3 Punkte überprüfen, die eine IP-Adresse enthält

1

Ich denke, Sie müssen TextWatcher zur Validierung verwenden, es mit TextView.addTextChangedListener () registrieren und Pattern.DOMAIN_NAME und Pattern.IP_ADDRESS (Android 2.2+) verwenden.

Sehen:
Android: Wie kann ich die Eingabe von EditText überprüfen?
IP in Android überprüfen

1
user802421

Wenn Sie 2 Radiobutton verwenden, zeigt einer einen Edittext für Host, der andere zeigt 4 numerische Edittext für IP. Sobald der Benutzer die Daten übermittelt hat, werden alle 4 Edittext-Werte mit Punkten zwischen ihnen gespeichert. ) + "." + edittext2.getText () + "." edittext3.getText () + "." edittext4.getText (), damit Sie eine solche validierte IP-Adresse erhalten können, aber dies bedeutet natürlich mehr Arbeit.

0
crit_

Versuchen Sie es mit Android:inputType="textUri". Es funktioniert besonders gut, wenn Sie einen Hostnamen oder eine IP-Adresse wünschen.

0
Sabaat Ahmad