Нажмите "." много раз (проверьте IP-адрес в EditText при вводе) - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть следующий EditText:

 <EditText
android:id="@+id/ip"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="numberDecimal">
</EditText>

Я хочу использовать это, чтобы получить IP-адрес.Но это не позволит мне напечатать '.'(знак точки) более одного раза, потому что для inputtype установлено значение numberDecimal.Любое предложение о том, как получить более одного "."при настройке inputType на цифры.

Ответы [ 3 ]

21 голосов
/ 27 апреля 2011

Вам нужно создать свой собственный InputFilter: http://developer.android.com/reference/android/text/InputFilter.html

Взгляните на этот ответ, который я написал некоторое время назад: Как настроить представление Edittext, допускающее только два числовых значения и два десятичных значения, например ##. ##


Обновление - пример кода

Вот адаптация к этому фильтру для проверки ips. Он проверяет наличие четырех цифр, разделенных точками, и ни одна из них не превышает 255. Проверка происходит в реальном времени, то есть при наборе.

    EditText text = new EditText(this);
    InputFilter[] filters = new InputFilter[1];
    filters[0] = new InputFilter() {
        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);
1 голос
/ 10 октября 2014

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

Нашел это решение в другой ветке.

Вы должны использовать att:

Android: цифры = "0123456789"

http://developer.android.com/reference/android/widget/TextView.html#attr_android:digits

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...