我想在edittext字段中以dd-mm-yyyy格式手动(即从数字键盘输入)输入日期。另外,为了另一个计算分配三个整数变量,日,月,年,前两个字符(即索引0,1)是日变量,然后自动添加一个分隔符(" - '或" /")然后接下来的两位数应该是月份变量,然后是自动分隔符,如之前和最后一年。日期和月份应显示为前导零的两位数(如有必要)。此外,如果用户在索引零(0)的日期字段中输入4-9,它会自动将其转换为两位数并移至月份字段,同样适用于第2-9个月,使该两位数移至年份。最后,当输入过程完成时,将光标移动到下一个edittext字段。 我为我可怜的英语道歉。 任何形式的帮助将不胜感激。 提前谢谢。
答案 0 :(得分:0)
我猜你必须生成一个新视图,它扩展了EditText并覆盖了onkeyup方法。 每次输入密钥时,您都可以获取文本,进行分析并根据需要进行更改。
答案 1 :(得分:0)
你可以用它。某些边缘情况未得到处理。做那些。
private static final char SEPERATOR = '-';
private void automateDateEntry() {
dateEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() > 10) {
charSequence = charSequence.subSequence(0, 10);
dateEditText.removeTextChangedListener(this);
dateEditText.setText(charSequence);
dateEditText.addTextChangedListener(this);
}
}
@Override
public void afterTextChanged(Editable editable) {
String currText = editable.toString();
if(currText.isEmpty())
return;
int separatorCount = getOcurrence(currText, SEPERATOR);
if (currText.charAt(currText.length() - 1) == SEPERATOR) {
return;
}
int lastSeperatorPos = currText.lastIndexOf(SEPERATOR);
String previousTxt = null;
if (lastSeperatorPos > -1) {
previousTxt = currText.substring(0, lastSeperatorPos + 1);
Log.d("curr text", currText);
currText = currText.substring(lastSeperatorPos + 1);
}
if (!currText.isEmpty()) {
switch (separatorCount) {
case 0:
int date = Integer.parseInt(currText);
if (date < 0 || date > 31) {
dateEditText.setError("Enter proper date");
return;
}
if (currText.length() == 2 || date >= 4) {
currText = String.format(Locale.getDefault(), "%02d", date);
currText += SEPERATOR;
}
break;
case 1: int month = Integer.parseInt(currText);
if (month < 0 || month > 31) {
dateEditText.setError("Enter proper month");
return;
}
if (currText.length() == 2 || month >= 2) {
currText = String.format(Locale.getDefault(), "%02d", month);
currText += SEPERATOR;
}
break;
case 2: int year = Integer.parseInt(currText);
if (year < 0 ) {
dateEditText.setError("Enter proper year");
return;
}
break;
}
}
if(previousTxt != null){
currText = previousTxt + currText;
}
dateEditText.removeTextChangedListener(this);
dateEditText.setText(currText);
int textLength = currText.length();
dateEditText.setSelection(textLength, textLength);
dateEditText.addTextChangedListener(this);
}
});
}
private int getOcurrence(String string, char ch) {
int count = 0;
int len = string.length();
for (int i = 0; i < len; i++) {
if (string.charAt(i) == ch)
++count;
}
return count;
}