inputType
numberDecimal
মধ্যে EditText
ডট ব্যবহার '।' দশমিক বিভাজক হিসাবে ইউরোপের পরিবর্তে কমা ',' ব্যবহার করা সাধারণ। যদিও আমার লোকেল জার্মান হিসাবে সেট করা আছে তবে দশমিক বিভাজক এখনও '।'
দশমিক বিভাজক হিসাবে কমা পাওয়ার কোনও উপায় আছে কি?
inputType
numberDecimal
মধ্যে EditText
ডট ব্যবহার '।' দশমিক বিভাজক হিসাবে ইউরোপের পরিবর্তে কমা ',' ব্যবহার করা সাধারণ। যদিও আমার লোকেল জার্মান হিসাবে সেট করা আছে তবে দশমিক বিভাজক এখনও '।'
দশমিক বিভাজক হিসাবে কমা পাওয়ার কোনও উপায় আছে কি?
উত্তর:
একটি workaround (গুগল এই ত্রুটি সংশোধন না করা পর্যন্ত) এবং এর EditText
সাথে ব্যবহার করা ।android:inputType="numberDecimal"
android:digits="0123456789.,"
তারপরে নিম্নলিখিত পাঠ্যপরিবর্তনের সাথে সম্পাদনা পাঠ্যতে একটি পাঠ্য-পরিবর্তিত লিস্টনার যুক্ত করুন:
public void afterTextChanged(Editable s) {
double doubleValue = 0;
if (s != null) {
try {
doubleValue = Double.parseDouble(s.toString().replace(',', '.'));
} catch (NumberFormatException e) {
//Error
}
}
//Do something with doubleValue
}
এখানে প্রদত্ত 'অঙ্ক' সমাধানগুলিতে একটি বৈচিত্র:
char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
input.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
অ্যাকাউন্টে লোকাল বিভাজক গ্রহণ করা।
,
কীবোর্ডে কী নেই । উদাহরণ: স্যামসং কীবোর্ড (কিটকাট)।
সম্পাদনা পাঠের জন্য কোড মুদ্রার মাস্ক অনুসরণ করুন (3 123,125.155)
এক্সএমএল লেআউট
<EditText
android:inputType="numberDecimal"
android:layout_height="wrap_content"
android:layout_width="200dp"
android:digits="0123456789.,$" />
কোড
EditText testFilter=...
testFilter.addTextChangedListener( new TextWatcher() {
boolean isEdiging;
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override public void afterTextChanged(Editable s) {
if(isEdiging) return;
isEdiging = true;
String str = s.toString().replaceAll( "[^\\d]", "" );
double s1 = Double.parseDouble(str);
NumberFormat nf2 = NumberFormat.getInstance(Locale.ENGLISH);
((DecimalFormat)nf2).applyPattern("$ ###,###.###");
s.replace(0, s.length(), nf2.format(s1));
isEdiging = false;
}
});
এটি অ্যান্ড্রয়েড এসডিকে একটি পরিচিত বাগ । আপনার নিজস্ব সফট কীবোর্ড তৈরি করাই একমাত্র কাজ। আপনি এখানে প্রয়োগের একটি উদাহরণ খুঁজে পেতে পারেন ।
আপনি যদি প্রোগ্রামটিমে এডিটেক্সট ইনস্ট্যান্ট করে দিচ্ছেন তবে মার্টিনস উত্তরটি কাজ করবে না। আমি এগিয়ে গেলাম এবং অন্তর্ভুক্ত সংশোধিতDigitsKeyListener
দশমিক বিভাজক হিসাবে কমা এবং সময় উভয়র জন্য মঞ্জুরি দেওয়ার জন্য এপিআই 14 থেকে শ্রেণিকে ।
এটি ব্যবহার করতে, ডায়াল setKeyListener()
করুন EditText
, যেমন
// Don't allow for signed input (minus), but allow for decimal points
editText.setKeyListener( new MyDigitsKeyListener( false, true ) );
যাইহোক, আপনি এখনও TextChangedListener
পিরিয়ড সহ কমা প্রতিস্থাপন যেখানে মার্টিন এর কৌশল ব্যবহার করতে হবে
import android.text.InputType;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.NumberKeyListener;
import android.view.KeyEvent;
class MyDigitsKeyListener extends NumberKeyListener {
/**
* The characters that are used.
*
* @see KeyEvent#getMatch
* @see #getAcceptedChars
*/
private static final char[][] CHARACTERS = new char[][] {
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' },
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-' },
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',' },
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', ',' },
};
private char[] mAccepted;
private boolean mSign;
private boolean mDecimal;
private static final int SIGN = 1;
private static final int DECIMAL = 2;
private static MyDigitsKeyListener[] sInstance = new MyDigitsKeyListener[4];
@Override
protected char[] getAcceptedChars() {
return mAccepted;
}
/**
* Allocates a DigitsKeyListener that accepts the digits 0 through 9.
*/
public MyDigitsKeyListener() {
this(false, false);
}
/**
* Allocates a DigitsKeyListener that accepts the digits 0 through 9,
* plus the minus sign (only at the beginning) and/or decimal point
* (only one per field) if specified.
*/
public MyDigitsKeyListener(boolean sign, boolean decimal) {
mSign = sign;
mDecimal = decimal;
int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0);
mAccepted = CHARACTERS[kind];
}
/**
* Returns a DigitsKeyListener that accepts the digits 0 through 9.
*/
public static MyDigitsKeyListener getInstance() {
return getInstance(false, false);
}
/**
* Returns a DigitsKeyListener that accepts the digits 0 through 9,
* plus the minus sign (only at the beginning) and/or decimal point
* (only one per field) if specified.
*/
public static MyDigitsKeyListener getInstance(boolean sign, boolean decimal) {
int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0);
if (sInstance[kind] != null)
return sInstance[kind];
sInstance[kind] = new MyDigitsKeyListener(sign, decimal);
return sInstance[kind];
}
/**
* Returns a DigitsKeyListener that accepts only the characters
* that appear in the specified String. Note that not all characters
* may be available on every keyboard.
*/
public static MyDigitsKeyListener getInstance(String accepted) {
// TODO: do we need a cache of these to avoid allocating?
MyDigitsKeyListener dim = new MyDigitsKeyListener();
dim.mAccepted = new char[accepted.length()];
accepted.getChars(0, accepted.length(), dim.mAccepted, 0);
return dim;
}
public int getInputType() {
int contentType = InputType.TYPE_CLASS_NUMBER;
if (mSign) {
contentType |= InputType.TYPE_NUMBER_FLAG_SIGNED;
}
if (mDecimal) {
contentType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
}
return contentType;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
CharSequence out = super.filter(source, start, end, dest, dstart, dend);
if (mSign == false && mDecimal == false) {
return out;
}
if (out != null) {
source = out;
start = 0;
end = out.length();
}
int sign = -1;
int decimal = -1;
int dlen = dest.length();
/*
* Find out if the existing text has '-' or '.' characters.
*/
for (int i = 0; i < dstart; i++) {
char c = dest.charAt(i);
if (c == '-') {
sign = i;
} else if (c == '.' || c == ',') {
decimal = i;
}
}
for (int i = dend; i < dlen; i++) {
char c = dest.charAt(i);
if (c == '-') {
return ""; // Nothing can be inserted in front of a '-'.
} else if (c == '.' || c == ',') {
decimal = i;
}
}
/*
* If it does, we must strip them out from the source.
* In addition, '-' must be the very first character,
* and nothing can be inserted before an existing '-'.
* Go in reverse order so the offsets are stable.
*/
SpannableStringBuilder stripped = null;
for (int i = end - 1; i >= start; i--) {
char c = source.charAt(i);
boolean strip = false;
if (c == '-') {
if (i != start || dstart != 0) {
strip = true;
} else if (sign >= 0) {
strip = true;
} else {
sign = i;
}
} else if (c == '.' || c == ',') {
if (decimal >= 0) {
strip = true;
} else {
decimal = i;
}
}
if (strip) {
if (end == start + 1) {
return ""; // Only one character, and it was stripped.
}
if (stripped == null) {
stripped = new SpannableStringBuilder(source, start, end);
}
stripped.delete(i - start, i + 1 - start);
}
}
if (stripped != null) {
return stripped;
} else if (out != null) {
return out;
} else {
return null;
}
}
}
আপনি বিভিন্ন লোকেলের জন্য নিম্নলিখিত ব্যবহার করতে পারেন
private void localeDecimalInput(final EditText editText){
DecimalFormat decFormat = (DecimalFormat) DecimalFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols=decFormat.getDecimalFormatSymbols();
final String defaultSeperator=Character.toString(symbols.getDecimalSeparator());
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
if(editable.toString().contains(defaultSeperator))
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
else
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + defaultSeperator));
}
});
}
বৈধ ইনপুট হিসাবে কমা অন্তর্ভুক্ত করতে আপনি নীচের কাজটি ব্যবহার করতে পারেন: -
এক্সএমএলের মাধ্যমে:
<EditText
android:inputType="number"
android:digits="0123456789.," />
প্রোগ্রামেটিক্যালি:
EditText input = new EditText(THE_CONTEXT);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789.,"));
এইভাবে অ্যান্ড্রয়েড সিস্টেম নম্বরগুলির কীবোর্ড দেখায় এবং কমাতে ইনপুট দেয়। এই প্রশ্নের উত্তর আশা করি :)
আপনি নিম্নলিখিত করতে পারেন:
DecimalFormatSymbols d = DecimalFormatSymbols.getInstance(Locale.getDefault());
input.setFilters(new InputFilter[] { new DecimalDigitsInputFilter(5, 2) });
input.setKeyListener(DigitsKeyListener.getInstance("0123456789" + d.getDecimalSeparator()));
এবং তারপরে আপনি একটি ইনপুট ফিল্টার ব্যবহার করতে পারেন:
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero) {
DecimalFormatSymbols d = new DecimalFormatSymbols(Locale.getDefault());
String s = "\\" + d.getDecimalSeparator();
mPattern = Pattern.compile("[0-9]{0," + (digitsBeforeZero - 1) + "}+((" + s + "[0-9]{0," + (digitsAfterZero - 1) + "})?)||(" + s + ")?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Matcher matcher = mPattern.matcher(dest);
if (!matcher.matches())
return "";
return null;
}
}
এই সমস্যাটির জন্য আইএমএইচওর সর্বোত্তম পন্থা হ'ল কেবল ইনপুটফিল্টার ব্যবহার করা। একটি দুর্দান্ত টুকরা এখানে ডেসিমাল ডিজিটস ইনপুটফিল্টার । তারপরে আপনি ঠিক করতে পারেন:
editText.setInputType(TYPE_NUMBER_FLAG_DECIMAL | TYPE_NUMBER_FLAG_SIGNED | TYPE_CLASS_NUMBER)
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,.-"))
editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});
আপনার ইনপুট ব্যবহার স্থানীয়করণ করতে:
char sep = DecimalFormatSymbols.getInstance().getDecimalSeparator();
এবং তারপরে যুক্ত করুন:
textEdit.setKeyListener(DigitsKeyListener.getInstance("0123456789" + sep));
"," সাথে "প্রতিস্থাপন করতে ভুলবেন না" সুতরাং ফ্লোট বা ডাবল এটিকে ত্রুটি ছাড়াই পার্স করতে পারে।
এখানের অন্যান্য সমস্ত পোস্টের সেগুলিতে বড় বড় ছিদ্র ছিল তাই এখানে একটি সমাধান যা এখানে আসবে:
এক্সএমএলে:
<EditText
...
android:inputType="numberDecimal"
... />
শ্রেণি পরিবর্তনশীল:
private boolean isDecimalSeparatorComma = false;
অনক্রিয়েটে, বর্তমান লোকালে ব্যবহৃত বিভাজকটি সন্ধান করুন:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
NumberFormat nf = NumberFormat.getInstance();
if (nf instanceof DecimalFormat) {
DecimalFormatSymbols sym = ((DecimalFormat) nf).getDecimalFormatSymbols();
char decSeparator = sym.getDecimalSeparator();
isDecimalSeparatorComma = Character.toString(decSeparator).equals(",");
}
}
এছাড়াও অনক্রিট, আপনি যদি কোনও বর্তমান মান লোড করে থাকেন তবে এটি আপডেট করতে এটি ব্যবহার করুন:
// Replace editText with commas or periods as needed for viewing
String editTextValue = getEditTextValue(); // load your current value
if (editTextValue.contains(".") && isDecimalSeparatorComma) {
editTextValue = editTextValue.replaceAll("\\.",",");
} else if (editTextValue.contains(",") && !isDecimalSeparatorComma) {
editTextValue = editTextValue.replaceAll(",",".");
}
setEditTextValue(editTextValue); // override your current value
এছাড়াও অনক্রিট, শ্রোতাদের যুক্ত করুন
editText.addTextChangedListener(editTextWatcher);
if (isDecimalSeparatorComma) {
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));
} else {
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789."));
}
editTextWatcher
TextWatcher editTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void afterTextChanged(Editable s) {
String editTextValue = s.toString();
// Count up the number of commas and periods
Pattern pattern = Pattern.compile("[,.]");
Matcher matcher = pattern.matcher(editTextValue);
int count = 0;
while (matcher.find()) {
count++;
}
// Don't let it put more than one comma or period
if (count > 1) {
s.delete(s.length()-1, s.length());
} else {
// If there is a comma or period at the end the value hasn't changed so don't update
if (!editTextValue.endsWith(",") && !editTextValue.endsWith(".")) {
doSomething()
}
}
}
};
doSomething () উদাহরণস্বরূপ, ডেটা ম্যানিপুলেশনের জন্য স্ট্যান্ডার্ড পিরিয়ডে রূপান্তর
private void doSomething() {
try {
String editTextStr = editText.getText().toString();
if (isDecimalSeparatorComma) {
editTextStr = editTextStr.replaceAll(",",".");
}
float editTextFloatValue = editTextStr.isEmpty() ?
0.0f :
Float.valueOf(editTextStr);
... use editTextFloatValue
} catch (NumberFormatException e) {
Log.e(TAG, "Error converting String to Double");
}
}
অ্যান্ড্রয়েড একটি বিল্ট ইন নম্বর বিন্যাসক আছে।
EditText
দশমিক এবং কমাগুলিকে অনুমতি দেওয়ার জন্য আপনি এটিতে এটি যুক্ত করতে পারেন:
android:inputType="numberDecimal"
এবংandroid:digits="0123456789.,"
তারপরে আপনার কোডের কোথাও, হয় যখন ক্লিক ক্লিক করুন ব্যবহারকারী সংরক্ষণ করুন বা পাঠ্য প্রবেশের পরে (শ্রোতার ব্যবহার করুন)।
// Format the number to the appropriate double
try {
Number formatted = NumberFormat.getInstance().parse(editText.getText().toString());
cost = formatted.doubleValue();
} catch (ParseException e) {
System.out.println("Error parsing cost string " + editText.getText().toString());
cost = 0.0;
}
আমি সম্পাদনা করার সময় কমাটি বিন্দুতে পরিবর্তন করার সিদ্ধান্ত নিয়েছি। এখানে আমার কৌশল এবং আপেক্ষিক সহজ কাজ আছে:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
EditText editText = (EditText) v;
String text = editText.getText().toString();
if (hasFocus) {
editText.setText(text.replace(",", "."));
} else {
if (!text.isEmpty()) {
Double doubleValue = Double.valueOf(text.replace(",", "."));
editText.setText(someDecimalFormatter.format(doubleValue));
}
}
}
});
কিছু ডেসিমাল ফরমেটার কমা ব্যবহার করবে বা ডট লোকালের উপর নির্ভর করবে
আমি জানি না কেন আপনার উত্তরগুলি এত জটিল। এসডিকে কোনও বাগ থাকলে আপনার এটি অবশ্যই ওভাররাইড করে বা ঘুরে বেড়াতে হবে।
আমি এই সমস্যাটি সমাধান করার জন্য দ্বিতীয় উপায়টি বেছে নিয়েছি। আপনি যদি নিজের স্ট্রিংটিকে ফর্ম্যাট করেন Locale.ENGLISH
এবং তারপরে এটি EditText
(এমনকি খালি স্ট্রিং হিসাবে) রেখে দেন। উদাহরণ:
String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
সেই সমাধানটির পশ্চাদ্ধাবন করা আপনার ফলাফল দেখানো কীবোর্ডের সাথে সামঞ্জস্যপূর্ণ। তারপরে ভাসা এবং ডাবল সংখ্যা কমা পরিবর্তে ডট দিয়ে প্রোগ্রামিং ভাষা পদ্ধতিতে সাধারণভাবে কাজ করে।
আমার সমাধানটি হ'ল:
প্রধান ক্রিয়াকলাপে:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator();
textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
এক্সএমএল ফাইলে:
android:imeOptions="flagNoFullscreen"
android:inputType="numberDecimal"
এবং আমি স্ট্রিং হিসাবে এডিটেক্সট এ ডাবল নিয়েছি।
আমি নিশ্চিত করতে পারি যে প্রস্তাবিত ফিক্সগুলি স্যামসাং আইএমই (কমপক্ষে এস 6 এবং এস 9 এ) এবং সম্ভবত এলজিতে কাজ করে না। তারা লোকাল নির্বিশেষে দশমিক বিভাজক হিসাবে একটি বিন্দু প্রদর্শন করে। গুগলের আইএমইতে স্যুইচ করা এটি ঠিক করে তবে বেশিরভাগ বিকাশকারীদের পক্ষে এটি খুব কমই বিকল্প।
এই কী-বোর্ডগুলির জন্য ওরিওতে এটি স্থির করা হয়নি কারণ এটি একটি স্থির যে স্যামসাং এবং / অথবা এলজি করতে হবে এবং তারপরে এমনকি তাদের প্রাচীন হ্যান্ডসেটগুলিতেও চাপ দিতে হবে।
আমি পরিবর্তে নম্বর-কীবোর্ড প্রকল্পটি কাঁটাচামচ করেছি এবং এমন একটি মোড যুক্ত করেছি যেখানে এটি কোনও আইএমই: কাঁটাচলার মতো আচরণ করে । বিশদ জন্য প্রকল্পের নমুনা দেখুন। এটি আমার পক্ষে বেশ ভালভাবে কাজ করেছে এবং ব্যাংকিং অ্যাপ্লিকেশনগুলিতে আপনি যে অনেকগুলি "পিন এন্ট্রি" নকল আইএমই দেখতে পান তার সাথে মিল রয়েছে।
এটা তোলে চেয়ে বেশি 8 বছর উত্তীর্ণ হন এবং অবাক হচ্ছি, এই সমস্যাটি এখনো সংশোধন করা হয় না হয় ...
আমি এই সহজ বিষয়টি যেহেতু সঙ্গে লড়াই দেয় @Martin সবচেয়ে সম্মত উত্তর নেই একাধিক বিভাজক টাইপ, অর্থাত্ ব্যবহারকারী "12 টাইপ করতে পারেন ,,, ,,, 12,1, 21,2, "
এছাড়াও, দ্বিতীয় উদ্বেগ হ'ল কিছু ডিভাইসে কমা সংখ্যাসূচক কীবোর্ডে প্রদর্শিত হয় না (বা কোনও ডট বোতামের একাধিক চাপ প্রয়োজন)
এখানে আমার কাজের সমাধান, যা উল্লিখিত সমস্যাগুলি সমাধান করে এবং ব্যবহারকারীকে টাইপ করতে দেয়। ' এবং ',' তবে এডিটেক্সটে তিনি একমাত্র দশমিক বিভাজক দেখতে পাবেন যা বর্তমান লোকেলের সাথে মিলে যায়:
editText.apply { addTextChangedListener(DoubleTextChangedListener(this)) }
এবং পাঠ্য প্রহরী:
open class DoubleTextChangedListener(private val et: EditText) : TextWatcher {
init {
et.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
et.keyListener = DigitsKeyListener.getInstance("0123456789.,")
}
private val separator = DecimalFormatSymbols.getInstance().decimalSeparator
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
//empty
}
@CallSuper
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
et.run {
removeTextChangedListener(this@DoubleTextChangedListener)
val formatted = toLocalizedDecimal(s.toString(), separator)
setText(formatted)
setSelection(formatted.length)
addTextChangedListener(this@DoubleTextChangedListener)
}
}
override fun afterTextChanged(s: Editable?) {
// empty
}
/**
* Formats input to a decimal. Leaves the only separator (or none), which matches [separator].
* Examples:
* 1. [s]="12.12", [separator]=',' -> result= "12,12"
* 2. [s]="12.12", [separator]='.' -> result= "12.12"
* 4. [s]="12,12", [separator]='.' -> result= "12.12"
* 5. [s]="12,12,,..,,,,,34..,", [separator]=',' -> result= "12,1234"
* 6. [s]="12.12,,..,,,,,34..,", [separator]='.' -> result= "12.1234"
* 7. [s]="5" -> result= "5"
*/
private fun toLocalizedDecimal(s: String, separator: Char): String {
val cleared = s.replace(",", ".")
val splitted = cleared.split('.').filter { it.isNotBlank() }
return when (splitted.size) {
0 -> s
1 -> cleared.replace('.', separator).replaceAfter(separator, "")
2 -> splitted.joinToString(separator.toString())
else -> splitted[0]
.plus(separator)
.plus(splitted.subList(1, splitted.size - 1).joinToString(""))
}
}
}
সহজ সমাধান, একটি কাস্টম নিয়ন্ত্রণ করুন। (এটি জামারিন অ্যান্ড্রয়েডে তৈরি তবে জাভাতে সহজেই পোর্ট করা উচিত)
public class EditTextDecimalNumber:EditText
{
readonly string _numberFormatDecimalSeparator;
public EditTextDecimalNumber(Context context, IAttributeSet attrs) : base(context, attrs)
{
InputType = InputTypes.NumberFlagDecimal;
TextChanged += EditTextDecimalNumber_TextChanged;
_numberFormatDecimalSeparator = System.Threading.Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
KeyListener = DigitsKeyListener.GetInstance($"0123456789{_numberFormatDecimalSeparator}");
}
private void EditTextDecimalNumber_TextChanged(object sender, TextChangedEventArgs e)
{
int noOfOccurence = this.Text.Count(x => x.ToString() == _numberFormatDecimalSeparator);
if (noOfOccurence >=2)
{
int lastIndexOf = this.Text.LastIndexOf(_numberFormatDecimalSeparator,StringComparison.CurrentCulture);
if (lastIndexOf!=-1)
{
this.Text = this.Text.Substring(0, lastIndexOf);
this.SetSelection(this.Text.Length);
}
}
}
}
আপনি ব্যবহার করতে পারেন inputType="phone"
, তবে সেক্ষেত্রে আপনাকে একাধিক ,
বা .
উপস্থিত থাকার সাথে মোকাবেলা করতে হবে , সুতরাং অতিরিক্ত বৈধতা প্রয়োজন।
আমি মনে করি যে এই সমাধানটি এখানে লিখিত অন্যদের চেয়ে কম জটিল:
<EditText
android:inputType="numberDecimal"
android:digits="0123456789," />
আপনি যখন '' টিপুন তখন এইভাবে। নরম কীবোর্ডে কিছুই ঘটে না; কেবল সংখ্যা এবং কমা অনুমোদিত।