Вы можете сделать это так:
объявить EditText
и добавить TextWatcher
TextWatcher tw = new TextWatcher() {
private String current = "";
private String ddmmyyyy = "DDMMYYYY";
}
, когда пользователь печатает
@Override
public void 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);
day = (day > cal.getActualMaximum(Calendar.DATE))? cal.getActualMaximum(Calendar.DATE):day;
year = (year<1900)?1900:(year>2100)?2100:year;
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));
current = clean;
date.setText(current);
date.setSelection(sel < current.length() ? sel : current.length());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {}
};
нет нет просто получить данные от пользователя. Я буду искать put mask, будет полезно. Есть ли способ сделать с простым способом. Потому что я не хочу потерять производительность программы. – dodotu
I Отредактировано с ответом –
Я хочу, чтобы текст редактирования показывался разделенными блоками. – dodotu