将Android EditText配置为允许小数和数字,不允许以';开头';或';00';和';000';等等
我有一个Android EditText,我想让数字键盘出现 如果我将将Android EditText配置为允许小数和数字,不允许以';开头';或';00';和';000';等等,android,android-edittext,numbers,decimal,Android,Android Edittext,Numbers,Decimal,我有一个Android EditText,我想让数字键盘出现 如果我将android:inputType设置为numberdecimal | number,我就可以使用数字键盘,并能够输入十进制和数字。但它可以输入'.00222''0000',否则,这不是我想要的,如果我在安卓4.4.2上编译项目,它的工作符合我的预期,但使用安卓6.0,这不是我的预期。 你如何让数字键盘能够在安卓6.0中输入小数和数字?现在发布我的建议有点晚了,不过,我认为这可能会对其他人有所帮助 将输入类型设置为“Numbe
android:inputType
设置为numberdecimal | number
,我就可以使用数字键盘,并能够输入十进制和数字。但它可以输入'.00222''0000'
,否则,这不是我想要的,如果我在安卓4.4.2
上编译项目,它的工作符合我的预期,但使用安卓6.0
,这不是我的预期。
你如何让数字键盘能够在安卓6.0中输入小数和数字?现在发布我的建议有点晚了,不过,我认为这可能会对其他人有所帮助 将输入类型设置为“NumberDecimal”,如android:inputType=“NumberDecimal”(即,实现一个只有数字和小数点可用的键盘),您可以设置一个输入过滤器,以防止用户输入任何您不喜欢的数字“.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;
}
}
现在发布我的建议有点晚了,但是,我认为它可能会帮助其他人 将输入类型设置为“NumberDecimal”,如android:inputType=“NumberDecimal”(即,实现一个只有数字和小数点可用的键盘),您可以设置一个输入过滤器,以防止用户输入任何您不喜欢的数字“.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;
}
}
好了,除了验证输入之外没有别的方法了
android:inputType
只是一个提示。。。因为你可以在android上定制键盘,所以没有通用的方法来实现这一点。。。尝试自己验证每个文本更改的输入“如果我将android:inputType设置为numberdecimal | number,我就可以使用数字键盘并能够输入十进制和数字”——不一定。Android设备有数千种型号。这些设备附带数百个软键盘,用户可以从Play Store安装其他键盘。正如塞尔文所指出的,android:inputType
是一个提示,而不是一个要求。每个键盘对所需的inputType
所做的操作取决于键盘的开发人员,而不是您。您可以在edittext上设置textWatcher,并在afterTextChanged功能中检查输入。如果用户键入的字符不适合您的要求,请删除最后一个字符并将光标移回一个字符。AFAIK除了验证输入之外,没有其他方法android:inputType
只是一个提示。。。因为你可以在android上定制键盘,所以没有通用的方法来实现这一点。。。尝试自己验证每个文本更改的输入“如果我将android:inputType设置为numberdecimal | number,我就可以使用数字键盘并能够输入十进制和数字”——不一定。Android设备有数千种型号。这些设备附带数百个软键盘,用户可以从Play Store安装其他键盘。正如塞尔文所指出的,android:inputType
是一个提示,而不是一个要求。每个键盘对所需的inputType
所做的操作取决于键盘的开发人员,而不是您。您可以在edittext上设置textWatcher,并在afterTextChanged功能中检查输入。如果用户键入任何不适合您需求的字符,请删除最后一个字符,并将光标移回一个字符。