web-dev-qa-db-fra.com

Quel Android: type d'entrée dois-je utiliser pour entrer une adresse IP?

Je construis une petite application Android dans laquelle l'utilisateur entre une adresse IP ou un nom d'hôte dans un widget EditText. 90% du temps, ils entreront une adresse IP, le reste du temps - un nom d'hôte.

Je souhaite donc naturellement optimiser pour leur faciliter la saisie d'une adresse IP, mais il est important de pouvoir basculer vers le mode alphanumérique.

Je n'arrive pas à trouver un bon inputType. La numberDecimal semblait initialement être un bon coup, mais elle ne permet qu’un point. 

Idéalement, j'aimerais commencer avec un clavier standard sur lequel le bouton ?123 est enfoncé.

Comment puis-je y arriver?

47
AngryHacker

Essayez d’utiliser Android:inputType="number", mais définissez également Android:digits="0123456789.". Travaille pour moi.

52
Bodacious

Si vous utilisez inputType="phone", vous avez accès à un clavier découpé contenant des chiffres et un caractère de période - cela ne limite pas l'entrée en ce qui concerne le nombre de périodes que vous pouvez entrer.

Veuillez consulter cette réponse pour validation lors de la saisie.

39
Graeme

Cela fonctionne parfaitement clavier avec des nombres et des décimales 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"/>
18
Munish Kapoor

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
SKT

utilisez ceci :

<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"/>

a travaillé pour moi

2
saurabh yadav

Vous pouvez étendre DigitsKeyListener ( source ) et modifier la fonction filter () (validation qui vérifie le modèle IP ou un nom d’hôte de chaîne) et getInputType () en return InputType.TYPE_CLASS_PHONE;

1
Jana

Je pense que votre seule option est ..

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

Vous pouvez éventuellement vérifier le texte pour 3 points qu'une adresse IP contient

1
coder_For_Life22

Je pense que vous devez utiliser TextWatcher pour la validation, enregistrez-le avec TextView.addTextChangedListener () et utilisez Pattern.DOMAIN_NAME et Pattern.IP_ADDRESS (Android 2.2+).

Voir:
Android: Comment valider la saisie EditText?
Validation de l’IP sous Android

1
user802421

Peut-être que si vous utilisez 2 radiobutton, l'un montre un edittext pour Host, l'autre montre 4 edittext numérique pour IP, puis, une fois que l'utilisateur a envoyé des données, concatemez les 4 valeurs edittext avec des points, comme ceci, edittext1.getText ( ) + "." + edittext2.getText () + "." edittext3.getText () + "." edittext4.getText () afin que vous puissiez obtenir une adresse IP validée de la sorte, mais cela impliquera évidemment plus de travail.

0
crit_

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

0
Sabaat Ahmad