Android 只能输入大于0的两位小数
时间: 2023-11-24 13:43:23 浏览: 145
要限制用户在 Android 中只能输入大于0的两位小数,你可以使用 InputFilter 进行输入过滤。下面是一个示例代码,演示如何实现此功能:
```java
import android.text.InputFilter;
import android.text.Spanned;
public class DecimalInputFilter implements InputFilter {
private static final int MAX_DIGITS_BEFORE_DECIMAL_POINT = 3;
private static final int MAX_DECIMAL_DIGITS = 2;
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source.subSequence(start, end).toString());
String input = builder.toString();
if (input.isEmpty()) {
return null; // 允许空字符串
}
if (!isValidDecimal(input)) {
return ""; // 非法输入,阻止输入
}
return null; // 输入合法,不做任何修改
}
private boolean isValidDecimal(String input) {
if (input.equals(".")) {
return false; // 单独一个小数点不合法
}
if (input.startsWith("0") && input.length() > 1 && !input.startsWith("0.")) {
return false; // 以0开头但不是0.开头的数字不合法
}
if (input.contains(".")) {
String[] parts = input.split("\\.");
if (parts.length > 2) {
return false; // 多个小数点不合法
}
String decimals = parts[1];
if (decimals.length() > MAX_DECIMAL_DIGITS) {
return false; // 小数位数超过限制
}
} else {
if (input.length() > MAX_DIGITS_BEFORE_DECIMAL_POINT) {
return false; // 整数部分位数超过限制
}
}
double value = Double.parseDouble(input);
return value > 0; // 大于0的两位小数合法
}
}
```
然后,你可以将此 InputFilter 应用于你的 EditText 上:
```java
EditText editText = findViewById(R.id.editText);
editText.setFilters(new InputFilter[]{new DecimalInputFilter()});
```
这样,当用户输入不符合要求的值时,EditText 将无法接受输入。
请注意,这只是一个简单的示例,你可以根据你的需求进行修改。另外,你还可以在提交表单或处理用户输入时再次验证输入的值。
阅读全文