我有edittext,我想输入百分比值,即小数值,所以我想限制用户在editText中只输入小于100的值。
示例:1)如果他想输入超过100的值,不应允许他输入此内容。
2)如果他想要输入十进制值小于100,即50.5444 那么应该允许他输入此值
我还找到此链接,我可以将整数值的最大值设置为100,但不允许我输入小数值
link:http://tech.chitgoks.com/2011/06/27/android-set-min-max-value-an-edittext-accepts/
任何人都可以帮助我。
答案 0 :(得分:3)
嘿,您可以使用TextWatcher,将其应用于EditText
并实施其提供的三种方法。然后,当您插入新值时,可以使用RegEx检查其有效性。
希望它有所帮助!
答案 1 :(得分:0)
以下是我使用的完整实施代码
editTextSpLinePercent.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
String enteredValue = s.toString();
if(checkNullValues(enteredValue)) {
if(Float.parseFloat(enteredValue.trim()) >100.0f){
AlertDialog.Builder builder = new AlertDialog.Builder(SpecialDiscountLineActivity.this);
// builder.setCancelable(true);
builder.setMessage("Percentage Value should be Less than 100");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
editTextSpLinePercent.setText("");
}
});
builder.show();
}
}
}
});
public static boolean checkNullValues(String valueToCheck) {
//Log.i("Log","CheckForNullValues : "+valueToCheck);
if(!(valueToCheck == null)) {
String valueCheck = valueToCheck.trim();
if(valueCheck.equals("") || valueCheck.equals("0") ) {
// Log.i("Log","Returning false 0 or Blank");
return false;
}
return true;
}
//Log.i("Log","Returning false null");
return false;
}
答案 2 :(得分:0)
您实际上可以如下修改问题中提到的链接中提供的有用代码段。另外,您也可以选择包含希望百分比包含的最大小数位数,如果输入与预期的模式不匹配,则使用模式匹配器返回""
。
private class PercentageInputFilter implements InputFilter {
private float min;
private float max;
PercentageInputFilter(float min, float max) {
this.min = min;
this.max = max;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
// Get input
String stringToMatch = dest.toString() + source.toString();
float input = Float.parseFloat(stringToMatch);
// Check if the input is in range.
if (isInRange(min, max, input)) {
// return null to accept the original replacement in case the format matches and text is in range.
return null;
}
} catch (NumberFormatException nfe) {
}
return "";
}
private boolean isInRange(float min, float max, float input) {
return input >= min && input <= max;
}
}
您可以像这样使用它:
new PercentageInputFilter((float) 0.00, (float) 100.00);