ユーザーがIPアドレスまたはホスト名をEditTextウィジェットに入力する小さなAndroidアプリを作成しています。残りの時間は、IPアドレスを入力する時間の90% -ホスト名。
ですから、当然、IPアドレスを簡単に入力できるように最適化したいと思いますが、ホスト名を入力するために英数字に切り替える機能は重要です。
良いinputTypeが見つからないようです。 numberDecimal
は最初は良いショットのように見えましたが、1つのドットしか許可しません。
理想的には、?123
ボタンが押された標準キーボードから始めたいと思います。
どうやってそこまで行くの?
Android:inputType="number"
を使用してみますが、Android:digits="0123456789."
も設定してください。私のために働く。
inputType="phone"
を使用すると、数字とピリオド文字を含むカットダウンキーボードにアクセスできます。これにより、入力できるピリオドの量に関する入力が制限されません。
入力中の検証については、 this answer を参照してください。
これは、Android:inputType = "number | numberDecimal"および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"/>
独自の入力フィルターを使用できます
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);
これを使って :
<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"/>
私のために働いた
DigitsKeyListenerを拡張し( source )、filter()関数(ipパターンまたは文字列ホスト名をチェックする検証)とgetInputType()をreturn InputType.TYPE_CLASS_PHONE;
に変更できます。
あなたの唯一の選択肢は..だと思います.
EditText Android:inputType="text" ... />
IPアドレスに含まれる3つのドットのテキストを確認できます。
検証には TextWatcher を使用し、 TextView.addTextChangedListener() メソッドで登録し、 Pattern.DOMAIN_NAME および Pattern.IP_ADDRESS (Android 2.2+)。
2つのラジオボタンを使用すると、1つはホストの編集テキストを表示し、もう1つはIPの4つの数値編集テキストを表示し、ユーザーがデータを送信すると、4つの編集テキスト値をドットで連結します。 )+ "。" + edittext2.getText()+ "。" edittext3.getText()+ "。" edittext4.getText()を使用すると、そのような検証済みIPアドレスを取得できますが、明らかにより多くの作業が必要になります。
Android:inputType="textUri"
を使用してみてください。ホスト名またはIPアドレスが必要な場合に特にうまく機能します。