java - update - Was android: inputType sollte ich für die Eingabe einer IP-Adresse verwenden?




android widget tutorial deutsch (8)

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, den Rest der Zeit - einen Hostnamen.

Natürlich möchte ich optimieren, um es ihnen zu erleichtern, eine IP-Adresse einzugeben, aber die Möglichkeit, zu alphanumerischen Zeichen für den Hostnamen-Eintrag zu wechseln, ist wichtig.

Ich kann keinen guten inputType finden. Die numberDecimal zunächst wie ein guter Schuss, aber es erlaubt nur einen Punkt.

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

Wie komme ich dort hin?

https://code.i-harness.com


Dies funktioniert perfekt Tastatur mit Zahlen und Dezimal durch Hinzufügen von Android: inputType = "number | numberDecimal" und android: digits = "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"/>

Ich denke deine einzige Option ist ..

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

Sie könnten den Text für 3 Punkte überprüfen, die eine IP-Adresse enthält


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);

Sie können den DigitsKeyListener ( source ) erweitern und die Funktion filter () ändern (Validierung, die entweder ip pattern oder einen String hostname überprüft) und getInputType (), return InputType.TYPE_CLASS_PHONE;


Versuchen Sie es mit android:inputType="textUri" . Es funktioniert besonders gut, wenn Sie Hostname oder IP-Adresse möchten.


Vielleicht, wenn Sie 2 Radiobutton verwenden, zeigt man einen Editiertext für den Host an, der andere zeigt 4 numerischen Edittext für IP, dann, sobald der Benutzer Daten übermittelt, fasst man alle 4 editedtext Werte mit Punkten zwischen ihnen, so etwas, edittext1.getText ( ) + "." + edittext2.getText () + "." edittext3.getText () + "." edittext4.getText (), damit Sie eine validierte IP-Adresse wie diese erhalten können, aber offensichtlich mehr Arbeit bedeutet.


benutze das :

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

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

hat für mich gearbeitet







android-widget