Quel android: inputType dois-je utiliser pour entrer une adresse IP?

je construis une petite application Android où l'utilisateur va entrer une adresse IP ou un nom d'hôte dans un widget EditText. 90% du temps ils seront d'entrer une adresse IP, le reste du temps - un nom d'hôte.

donc naturellement, je veux optimiser pour rendre plus facile pour eux d'entrer une adresse IP, mais la capacité de passer à Alpha numerics pour l'entrée de nom d'hôte est importante.

Je n'arrive pas à trouver un bon type d'entrée. Le numberDecimal au départ semblait être un bon coup, mais il permet uniquement d'un point.

idéalement, j'aimerais commencer avec un clavier standard qui a appuyé sur le bouton ?123 .

comment y aller?

45
demandé sur AngryHacker 2011-12-29 02:15:12

11 réponses

Essayez d'utiliser android:inputType="number" , mais aussi android:digits="0123456789." . Fonctionne pour moi.

49
répondu Bodacious 2014-02-03 22:06:17

si vous utilisez inputType="phone" vous accédez à un clavier réduit contenant des nombres et un caractère de période - Cela ne restreint pas la saisie en ce qui concerne le nombre de périodes que vous pouvez entrer.

s'il vous Plaît voir cette réponse pour la validation en cours de saisie.

37
répondu Graeme 2017-05-23 12:34:43

cela fonctionne parfaitement clavier avec des nombres et décimal en ajoutant android:inputType=" number|numberDecimal"et android:digits=" 0123456789."

exemple

 <EditText
    android:id="@+id/ip_address"
    android:inputType="number|numberDecimal"
    android:digits="0123456789."
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
17
répondu Munish Kapoor 2014-10-10 02:06:03

vous pouvez utiliser votre propre filtre d'entrée pour cela ""

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
répondu SKT 2017-03-27 21:18:45

utilisez ceci:

<EditText
    android:id="@+id/txtIP"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="0123456789."
 />
5
répondu Richi 2017-06-28 07:41:24

je pense que votre seule option est..

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

vous pouvez vérifier le texte pour 3 points une adresse IP contient

1
répondu coder_For_Life22 2011-12-28 22:24:16
1
répondu user802421 2017-05-23 12:26:20

vous pouvez étendre le DigitsKeyListener ( source ) et changer la fonction filter () (validation qui vérifiera soit le modèle ip ou une chaîne de nom d'hôte) et getInputType () à return InputType.TYPE_CLASS_PHONE;

1
répondu Jana 2011-12-28 22:47:30
<EditText
    android:id="@+id/ip_address"
    android:inputType="number|numberDecimal"
    android:digits="0123456789."
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

a travaillé pour moi

1
répondu saurabh yadav 2017-08-09 12:03:07

essayez android:inputType="textUri" . Cela fonctionne particulièrement bien lorsque vous voulez un nom d'hôte ou une adresse IP.

1
répondu Sabaat Ahmad 2018-03-24 20:35:29

peut-être que si vous utilisez 2 radiobutton, l'un montre un texte édité pour l'hôte, l'autre montre 4 texte édité numérique pour IP, puis, une fois que l'utilisateur soumet des données, vous concattez les 4 valeurs éditées avec des points entre eux, quelque chose comme ceci, edittext1.getText ()+"."+edittext2.getText ()+"."edittext3.getText ()+"."edittext4.getText () vous permet d'obtenir une adresse IP validée comme celle-ci, mais évidemment cela impliquera plus de travail.

0
répondu crit_ 2015-01-16 15:10:21