【问题标题】:Add dash/hyphen after 4 digits in edittext in android在android的edittext中的4位数字后添加破折号/连字符
【发布时间】:2017-06-08 19:34:29
【问题描述】:

我是在edittext中自动显示4位连字符后实现的(2015-07)。我的代码工作正常,但问题是我在 4 位数字值之前删除并再次输入它不起作用。当我像 2015-07 到 2014-07 一样重新输入 edidtext 时,addTextChangedListener 不会触发。但是当我使用“/”而不是“-”时,我可以重新输入值。有什么问题?

mEdtProductionCode.addTextChangedListener(new TextWatcher() {
        int prevL = 0;
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            prevL = mEdtProductionCode.getText().toString().length();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            int length = s.length();
            if ((prevL < length) && length == 4) {
                String data = mEdtProductionCode.getText().toString();
                mEdtProductionCode.setText(data + "-");
                mEdtProductionCode.setSelection(length + 1);
            }
        }
    });

【问题讨论】:

  • 没人回答??
  • 问题在于 prevLlength 比较。如果您删除第 4 位之前的字符,您的 prevL 将大于 length 并且不会执行 afterTextChanged 方法中的代码

标签: android


【解决方案1】:

您应该将字符检查移至输入第五个字符后的字符,然后砍掉字符串以将自定义字符放在两者之间:

 @Override
        public void afterTextChanged(Editable s) {
            int length = s.length();
            if ((prevL <= length) && length == 5) {

                String data = mEditProductionCode.getText().toString();
                String beginData = data.substring(0,4);

                String endData = Character.toString(data.charAt(length-1));
                mEditProductionCode.setText(beginData + "-" + endData);
                mEditProductionCode.setSelection(length + 1);
            }
        }

您还可以使用data.charAt(length-1) != '-' 来检查用户是否手动输入了破折号,在这种情况下,您只需忽略并且不对 TextEdit 进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 2021-07-01
    • 2018-08-31
    • 2015-02-26
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多