这是我的EditText,并希望它只接受一个IP地址.我使用numberDecimal作为inputType但它不接受多个点.
<EditText
android:id="@+id/etBannedIpAddress"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:hint="IP Address"
android:inputType="numberDecimal"
android:textAppearance="@android:style/TextAppearance.Small"
android:textColor="@color/blue_text" />
Run Code Online (Sandbox Code Playgroud)
No *_*ame 12
尝试这样:通过使用输入过滤器,我们可以在输入值之前过滤数据.
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
android.text.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;
}
};
editTxxt.setFilters(filters);
Run Code Online (Sandbox Code Playgroud)
方法1:使用输入过滤器,请尝试以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
它检查是否存在由点分隔的四个数字,且每个数字都不大于255。验证是实时进行的,即在键入时。
但是您需要像上面那样编写自定义输入过滤器代码。
方法2:添加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"/>
Run Code Online (Sandbox Code Playgroud)