2) Now initialize Edit Text in your java file. Here I have used the method DateDialog to open the calendar popup and select the date. Here I have used the method DateDialog to. AlarmClock; BlockedNumberContract; BlockedNumberContract.BlockedNumbers; Browser; CalendarContract; CalendarContract.Attendees; CalendarContract.CalendarAlerts. The goal of this code it to auto fomart the texts in an input field into Currency format. So for example if user starts typing 0123 it will be autoformatted to $01.23 I was able to get this to work with the code below but I need help to get this to work in Xamarin.Android. Android.Java implementation - working.
Android Format Edittext Input
Format Number Edittext Android
//SOURCE: http://stackoverflow.com/questions/16889502/how-to-mask-an-edittext-to-show-the-dd-mm-yyyy-date-format |
EditText date; |
date = (EditText)findViewById(R.id.whichdate); |
date.addTextChangedListener(tw); |
TextWatcher tw =newTextWatcher() { |
privateString current =''; |
privateString ddmmyyyy ='DDMMYYYY'; |
privateCalendar cal =Calendar.getInstance(); |
When user changes text of the EditText |
@Override |
publicvoid onTextChanged(CharSequence s, int start, int before, int count) { |
if (!s.toString().equals(current)) { |
String clean = s.toString().replaceAll('[^d.]', ''); |
String cleanC = current.replaceAll('[^d.]', ''); |
int cl = clean.length(); |
int sel = cl; |
for (int i =2; i <= cl && i <6; i +=2) { |
sel++; |
} |
//Fix for pressing delete next to a forward slash |
if (clean.equals(cleanC)) sel--; |
if (clean.length() <8){ |
clean = clean + ddmmyyyy.substring(clean.length()); |
}else{ |
//This part makes sure that when we finish entering numbers |
//the date is correct, fixing it otherwise |
int day =Integer.parseInt(clean.substring(0,2)); |
int mon =Integer.parseInt(clean.substring(2,4)); |
int year =Integer.parseInt(clean.substring(4,8)); |
if(mon >12) mon =12; |
cal.set(Calendar.MONTH, mon-1); |
year = (year<1900)?1900:(year>2100)?2100:year; |
cal.set(Calendar.YEAR, year); |
// ^ first set year for the line below to work correctly |
//with leap years - otherwise, date e.g. 29/02/2012 |
//would be automatically corrected to 28/02/2012 |
day = (day > cal.getActualMaximum(Calendar.DATE))? cal.getActualMaximum(Calendar.DATE):day; |
clean =String.format('%02d%02d%02d',day, mon, year); |
} |
clean =String.format('%s/%s/%s', clean.substring(0, 2), |
clean.substring(2, 4), |
clean.substring(4, 8)); |
sel = sel <0?0: sel; |
current = clean; |
date.setText(current); |
date.setSelection(sel < current.length() ? sel : current.length()); |
} |
} |
We also implement the other two functions because we have to |
@Override |
publicvoid beforeTextChanged(CharSequence s, int start, int count, int after) {} |
@Override |
publicvoid afterTextChanged(Editable s) {} |
}; |
commented Nov 27, 2019
when one character in middle is deleted cursor deletes the last character.how to fix this? |