অন্যরা যেমন বলেছেন, আমি এই প্রকল্পটি আমার প্রকল্পে যুক্ত করেছি এবং ফিল্টারটি আমার পছন্দসইতে সেট EditText
করেছি।
@ পিক্সেলের উত্তর থেকে ফিল্টারটি অনুলিপি করা হয়েছে। আমি শুধু সব একসাথে রাখছি।
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 দেখায় যা নিখুঁত।
তারপরে আমি এই ইনপুটটি অন্য কয়েকটি গণনার জন্য ব্যবহার করতে চেয়েছিলাম তাই আমি input ইনপুট ক্ষেত্রটি ( EditText
) থেকে পাঠ্যটি পেতে চাই । যখন ফোন করলামmEditText.getText().toString()
এটিকে 1.5699856987 রিটার্ন বলেছিলাম যা আমার ক্ষেত্রে গ্রহণযোগ্য নয়।
সুতরাং আমি এটি থেকে পাওয়ার পরে আবার মানটি পার্স করতে হয়েছিল EditText
।
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
থেকে সম্পূর্ণ পাঠ্য প্রাপ্তির পরে কৌতুকটি এখানে করে EditText
।