web-dev-qa-db-ja.com

IPアドレスの入力に使用するAndroid:inputTypeは何ですか?

ユーザーがIPアドレスまたはホスト名をEditTextウィジェットに入力する小さなAndroidアプリを作成しています。残りの時間は、IPアドレスを入力する時間の90% -ホスト名。

ですから、当然、IPアドレスを簡単に入力できるように最適化したいと思いますが、ホスト名を入力するために英数字に切り替える機能は重要です。

良いinputTypeが見つからないようです。 numberDecimalは最初は良いショットのように見えましたが、1つのドットしか許可しません。

理想的には、?123ボタンが押された標準キーボードから始めたいと思います。

どうやってそこまで行くの?

48
AngryHacker

Android:inputType="number"を使用してみますが、Android:digits="0123456789."も設定してください。私のために働く。

55
Bodacious

inputType="phone"を使用すると、数字とピリオド文字を含むカットダウンキーボードにアクセスできます。これにより、入力できるピリオドの量に関する入力が制限されません。

入力中の検証については、 this answer を参照してください。

40
Graeme

これは、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"/>
21
Munish Kapoor

独自の入力フィルターを使用できます

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

これを使って :

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

私のために働いた

2
saurabh yadav

DigitsKeyListenerを拡張し( source )、filter()関数(ipパターンまたは文字列ホスト名をチェックする検証)とgetInputType()をreturn InputType.TYPE_CLASS_PHONE;に変更できます。

1
Jana

あなたの唯一の選択肢は..だと思います.

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

IPアドレスに含まれる3つのドットのテキストを確認できます。

1
1
user802421

2つのラジオボタンを使用すると、1つはホストの編集テキストを表示し、もう1つはIPの4つの数値編集テキストを表示し、ユーザーがデータを送信すると、4つの編集テキスト値をドットで連結します。 )+ "。" + edittext2.getText()+ "。" edittext3.getText()+ "。" edittext4.getText()を使用すると、そのような検証済みIPアドレスを取得できますが、明らかにより多くの作業が必要になります。

0
crit_

Android:inputType="textUri"を使用してみてください。ホスト名またはIPアドレスが必要な場合に特にうまく機能します。

0
Sabaat Ahmad