Подтвердить что ты не робот

Какой андроид: inputType следует использовать для ввода IP-адреса?

Я создаю небольшое приложение для Android, в котором пользователь вводит IP-адрес или имя хоста в виджет EditText. 90% времени они будут вводить IP-адрес, а остальное время - имя хоста.

Поэтому, естественно, я хочу оптимизировать для упрощения ввода IP-адреса, но важно переключиться на альфа-число для ввода имени хоста.

Я не могу найти хороший тип ввода. Первоначально numberDecimal казался хорошим выстрелом, но он допускал только одну точку.

В идеале я хотел бы начать со стандартной клавиатуры, на которой была нажата кнопка ?123.

Как мне туда добраться?

4b9b3361

Ответ 1

Попробуйте использовать android:inputType="number", но также установите android:digits="0123456789.". Работает для меня.

Ответ 2

Если вы используете inputType="phone", вы получаете доступ к вырезанной клавиатуре, содержащей цифры и символ периода, - это не ограничивает ввод в отношении количества периодов, которые вы можете ввести.

Пожалуйста, смотрите этот ответ для подтверждения при вводе.

Ответ 3

Это отлично работает с цифрами и десятичными словами, добавив 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"/>

Ответ 4

Вы можете использовать свой собственный входной фильтр для этого

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);

Ответ 5

используйте это:

<EditText
    android:id="@+id/txtIP"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="0123456789."
 />

Ответ 6

Я думаю, что ваш единственный вариант...

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

Вы можете проверить текст на 3 точки, IP-адрес содержит

Ответ 8

Вы можете расширить DigitsKeyListener (source) и изменить функцию filter() (проверка, которая будет проверять либо шаблон ip, либо строку hostname) и getInputType() до return InputType.TYPE_CLASS_PHONE;

Ответ 9

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

работал у меня

Ответ 10

Может быть, если вы используете 2 радиообъектива, один показывает edittext для хоста, другой показывает 4 цифровых edittext для IP, тогда, как только пользователь отправит данные, вы соедините все 4 значения edittext с точками между ними, что-то вроде этого, edittext1.getText() + "." + edittext2.getText() + "." edittext3.getText() + "." edittext4.getText(), чтобы вы могли получить одобренный IP-адрес, как это, но, очевидно, это будет означать большую работу.