다른 사람들이 말했듯이 프로젝트에이 클래스를 추가하고 필터를 EditText
원하는대로 설정했습니다 .
필터는 @Pixel의 답변에서 복사됩니다. 나는 그것을 모두 모으고 있습니다.
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter() {
mPattern = Pattern.compile("([1-9]{1}[0-9]{0,2}([0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String formatedSource = source.subSequence(start, end).toString();
String destPrefix = dest.subSequence(0, dstart).toString();
String destSuffix = dest.subSequence(dend, dest.length()).toString();
String result = destPrefix + formatedSource + destSuffix;
result = result.replace(",", ".");
Matcher matcher = mPattern.matcher(result);
if (matcher.matches()) {
return null;
}
return "";
}
}
이제 EditText
이와 같이 필터를 설정하십시오 .
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
여기서 한 가지 중요한 점은 해결할 수있는 문제를한다는 점에서 소수점 이후 두 개 이상의 숫자를 보여주는 허용하지 않는 내 문제를 않는 것입니다 EditText
하지만 난 때 문제는 getText()
것과 EditText
, 그것이 내가 입력 한 모든 입력을 반환합니다.
예를 들어에 필터를 적용한 후 EditText
입력 1.5699856987을 설정하려고했습니다. 그래서 화면에서 그것은 완벽한 1.56을 보여줍니다.
그런 다음이 입력을 다른 계산에 사용하고 싶었으므로 해당 입력 필드 ( EditText
) 에서 텍스트를 가져오고 싶었습니다 . 내가 전화했을 때 mEditText.getText().toString()
내 경우에는 허용되지 않는 1.5699856987을 반환합니다.
그래서 .NET에서 가져온 값을 다시 파싱해야했습니다 EditText
.
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
에서 전체 텍스트를 가져온 후 여기에서 트릭을 수행합니다 EditText
.