Seperti yang dikatakan orang lain, saya menambahkan kelas ini dalam proyek saya dan menyetel filter ke EditText
saya inginkan.
Filter disalin dari jawaban @ Pixel. Saya hanya menyatukan semuanya.
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 "";
}
}
Sekarang atur filter EditText
seperti ini.
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
Di sini satu hal penting adalah itu memecahkan masalah saya karena tidak mengizinkan menampilkan lebih dari dua digit setelah titik desimal di dalamnya EditText
tetapi masalahnya adalah ketika saya getText()
dari itu EditText
, ia mengembalikan seluruh input yang saya ketikkan.
Misalnya, setelah menerapkan filter di atas EditText
, saya mencoba menyetel input 1.5699856987. Jadi di layar itu menunjukkan 1,56 yang sempurna.
Kemudian saya ingin menggunakan input ini untuk beberapa kalkulasi lain, jadi saya ingin mendapatkan teks dari kolom input itu (EditText
). Ketika saya memanggilnya mEditText.getText().toString()
mengembalikan 1,5699856987 yang tidak dapat diterima dalam kasus saya.
Jadi saya harus mengurai nilainya lagi setelah mendapatkannya dari EditText
.
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
melakukan trik di sini setelah mendapatkan teks lengkap dari EditText
.