it-swarm.com.ru

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

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

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

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

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

Как туда попасть?

47
AngryHacker

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

52
Bodacious

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

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

39
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"/>
18
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."
 />
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"/>

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

2
saurabh yadav

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

1
Jana

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

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

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

1
coder_For_Life22

Я думаю, что вам нужно использовать TextWatcher для проверки, зарегистрируйте его в TextView.addTextChangedListener () method и используйте Pattern.DOMAIN_NAME и Pattern.IP_ADDRESS (Android 2.2+).

Увидеть:
Android: Как я могу проверить ввод EditText?
Проверка IP в Android

1
user802421

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

0
crit_

Попробуйте использовать Android:inputType="textUri". Это работает особенно хорошо, когда вы хотите имя хоста или IP-адрес.

0
Sabaat Ahmad