Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按"&引用;多次(键入时验证EditText中的ip地址)_Android_User Interface_Android Edittext_Validation - Fatal编程技术网

Android 按"&引用;多次(键入时验证EditText中的ip地址)

Android 按"&引用;多次(键入时验证EditText中的ip地址),android,user-interface,android-edittext,validation,Android,User Interface,Android Edittext,Validation,我有以下文本: <EditText android:id="@+id/ip" android:layout_width="200dip" android:layout_height="wrap_content" android:singleLine="true" android:inputType="numberDecimal"> </EditText> 我想用这个来获取ip地址。但它不允许我多次键入“.”(句号),因为inputtype设置为numberDeci

我有以下文本:

 <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设置为数字时获取多个“.”的任何建议。

您需要创建自己的
InputFilter

看看我不久前写的这个答案:


更新-示例代码 下面是对该过滤器的一个修改,用于验证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);
EditText text=新的EditText(本);
InputFilter[]过滤器=新的InputFilter[1];
筛选器[0]=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
如果(结束>开始){
字符串destTxt=dest.toString();
String resultingTxt=destTxt.substring(0,dstart)+source.subSequence(start,end)+destTxt.substring(dend);
如果(!resultingTxt.matches(“^\\d{1,3}”(\\d{1,3})(\\.(\\d{1,3})(\\.(\\d{1,3})?)?)?”)
返回“”;
}否则{
String[]splits=resultingTxt.split(“\\”);
对于(int i=0;i 255){
返回“”;
}
}
}
}
返回null;
}
};
text.setFilters(过滤器);

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

您应该使用att:

android:digits=“0123456789。”


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


非常好,但仍将接受多个零(例如000.00.020.001)。我只是编辑了一点,因为这也起作用。但你的答案是最好的。