我有一个Android EditText,我想让数字键盘出现。
如果我将shipping_information
设置为subtotal
,我会得到数字键盘以及键入小数和数字的功能。但是它可以输入subtotal
其他,这不是我想要的,如果我在shipping_and_handling
编译项目并且它按预期工作,但使用shipping_and_handling
,这不是我的预期。
如何获得能够在base_grand_total
中输入小数和数字的数字键盘?
答案 0 :(得分:2)
发布我的建议有点迟,但是,我认为这可能有助于其他人。
输入类型设置为“NumberDecimal”,如android:inputType =“numberDecimal”(即,为了实现只有数字和小数点可用的keyborad),您可以设置输入过滤器以防止用户输入任何数字你不想要“.XX”,“00”等。请在下面找到这个例子。
public class NumberDecimalInputFilter implements InputFilter {
private int numbOfDigitsAfterDecimalPoint_;
private boolean firstDigitIsZero_;
public NumberDecimalInputFilter(int numbOfDigitsAfterDecimalPoint) {
numbOfDigitsAfterDecimalPoint_ = numbOfDigitsAfterDecimalPoint;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
int dotPosition = -1;
int desLength = dest.length();
if (desLength == 0) {
if (source.equals(".")) { //do not allow nothing preceding the dot
return "";
}
firstDigitIsZero_ = source.equals("0") ? true : false;
}
if (firstDigitIsZero_ && desLength == 1 && !source.equals(".")) { //only allow a dot follows the first 0, i.e., to prevent 00, 01 or 001 ...
return "";
}
for (int i = 0; i < desLength; i++) {
char c = dest.charAt(i);
if (c == '.' || c == ',') {
dotPosition = i;
break;
}
}
if (dotPosition >= 0) {
// protects against many dots
if (source.equals(".") || source.equals(",")) {
return "";
}
// if the text is entered before the dot
if (dend <= dotPosition) {
return null;
}
if (desLength - dotPosition > numbOfDigitsAfterDecimalPoint_) {
return "";
}
}
return null;
}
}
用法 - 将编辑文本设置为仅允许小数点后的两位数。
EditTextInstance.setFilters(new InputFilter[] {new NumberDecimalInputFilter(2)});