在edittext中手动输入日期

时间:2017-07-26 07:39:06

标签: java android android-edittext user-input

我想在edittext字段中以dd-mm-yyyy格式手动(即从数字键盘输入)输入日期。另外,为了另一个计算分配三个整数变量,日,月,年,前两个字符(即索引0,1)是日变量,然后自动添加一个分隔符(" - '或" /")然后接下来的两位数应该是月份变量,然后是自动分隔符,如之前和最后一年。日期和月份应显示为前导零的两位数(如有必要)。此外,如果用户在索引零(0)的日期字段中输入4-9,它会自动将其转换为两位数并移至月份字段,同样适用于第2-9个月,使该两位数移至年份。最后,当输入过程完成时,将光标移动到下一个edittext字段。 我为我可怜的英语道歉。 任何形式的帮助将不胜感激。 提前谢谢。

2 个答案:

答案 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;
    }