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?
11 réponses
Essayez d'utiliser android:inputType="number"
, mais aussi android:digits="0123456789."
. Fonctionne pour moi.
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.
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"/>
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);
utilisez ceci:
<EditText
android:id="@+id/txtIP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="0123456789."
/>
je pense que votre seule option est..
EditText android:inputType="text" ... />
vous pouvez vérifier le texte pour 3 points une adresse IP contient
je pense que vous devez utiliser TextWatcher pour la validation, enregistrez-le avec TextView.addTextChangedListener() méthode et utiliser Modèle.Nom de domaine et Pattern.IP_ADDRESS (Android 2.2+).
voir:
Android: Comment puis-je valider les entrées EditText?
validation de L'IP sur android
<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
essayez android:inputType="textUri"
. Cela fonctionne particulièrement bien lorsque vous voulez un nom d'hôte ou une adresse IP.
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.