多次按"."(键入时验证编辑文本中的 IP 地址)



我有以下EditText:

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

我想用这个来获取ip地址。但是它不允许我输入。因为输入类型设置为numberDecimal,所以多次输入(点号)。有什么建议吗?

您需要创建自己的InputFilter: http://developer.android.com/reference/android/text/InputFilter.html

看看我之前写的这个答案:如何设置Edittext视图只允许两个数值和两个十进制值,如##.##


更新-示例代码

下面是对该过滤器的一个改编,用于验证ip。它检查是否存在四个数字,用点分隔,并且没有一个大于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);

在另一个线程中找到此解决方案。

你应该使用att:

android:数字= " 0123456789。"

http://developer.android.com/reference/android/widget/TextView.html attr_android:数字

通过添加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"/>

相关内容

  • 没有找到相关文章

最新更新