【问题标题】:Android - How to get edittext as in this xx-xxx-xxx-xxx-x format?Android - 如何以这种 xx-xxx-xxx-xxx-x 格式获取edittext?
【发布时间】:2016-08-26 05:30:15
【问题描述】:

我想在 EditText 上以这种 xx-xxx-xxx-xxx-x 格式显示数字。

例如 (01-140-176-515-4)

我尝试修改以下以信用卡号格式显示数字的代码 (xxxx-xxxx-xxxx-xxxx)

et_cardnumber.addTextChangedListener(new TextWatcher() {

        private static final int TOTAL_SYMBOLS = 19; // size of pattern 0000-0000-0000-0000
        private static final int TOTAL_DIGITS = 16; // max numbers of digits in pattern: 0000 x 4
        private static final int DIVIDER_MODULO = 5; // means divider position is every 5th symbol beginning with 1
        private static final int DIVIDER_POSITION = DIVIDER_MODULO - 1; // means divider position is every 4th symbol beginning with 0
        private static final char DIVIDER = '-';

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // noop
        }

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

            iv_cardtype.setImageResource(getCreditCardTypeForImageView(et_cardnumber.getText().toString()));
        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!isInputCorrect(s, TOTAL_SYMBOLS, DIVIDER_MODULO, DIVIDER)) {
                s.replace(0, s.length(), buildCorrecntString(getDigitArray(s, TOTAL_DIGITS), DIVIDER_POSITION, DIVIDER));
            }
        }

        private boolean isInputCorrect(Editable s, int totalSymbols, int dividerModulo, char divider) {
            boolean isCorrect = s.length() <= totalSymbols; // check size of entered string
            for (int i = 0; i < s.length(); i++) { // chech that every element is right
                if (i > 0 && (i + 1) % dividerModulo == 0) {
                    isCorrect &= divider == s.charAt(i);
                } else {
                    isCorrect &= Character.isDigit(s.charAt(i));
                }
            }
            return isCorrect;
        }

        private String buildCorrecntString(char[] digits, int dividerPosition, char divider) {
            final StringBuilder formatted = new StringBuilder();

            for (int i = 0; i < digits.length; i++) {
                if (digits[i] != 0) {
                    formatted.append(digits[i]);
                    if ((i > 0) && (i < (digits.length - 1)) && (((i + 1) % dividerPosition) == 0)) {
                        formatted.append(divider);
                    }
                }
            }

            return formatted.toString();
        }

        private char[] getDigitArray(final Editable s, final int size) {
            char[] digits = new char[size];
            int index = 0;
            for (int i = 0; i < s.length() && index < size; i++) {
                char current = s.charAt(i);
                if (Character.isDigit(current)) {
                    digits[index] = current;
                    index++;
                }
            }
            return digits;
        }
    });

当我进行更改以获得我想要的格式时,我无法正确处理。

谁能帮我获取xx-xxx-xxx-xxx-x格式的号码?

【问题讨论】:

  • 已经讨论过here
  • @AneebKhawar 是的,这是信用卡号码格式。如果我只是附加一个我想要的格式(xx-xxx-xxx-xxx-x)的'-'字符,它不会在退格键按下时被删除。

标签: android android-edittext


【解决方案1】:

我对 Android 了解不多,但尝试构建类似的东西。

str Yourstring = "";
for (int i = 0; i < digits.length; i++) {
                if (i == 2 || i == 5 || i == 8 || i == 11) {
                    Yourstring = Yourstring + "-" +digits[i];
                  }
              else 
                  {
                    Yourstring = Yourstring +digits[i];
                  }
            }

【讨论】:

    【解决方案2】:

    这个link已经回答过了,请根据你的格式改一下逻辑

    【讨论】:

    • 谢谢,它有效。但无法在以下情况下显示格式。 1.如果我们将复制的数字粘贴到编辑文本上,则无法以格式(xx-xxx-xxx-xxx-x)显示数字, 2.如果我们在EditText中间输入数字,则再次失败。
    【解决方案3】:

    使用这个库。 它会根据你的格式允许

    EditText Pattern lib

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 2011-12-04
      • 1970-01-01
      • 2016-09-14
      • 2011-04-07
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      相关资源
      最近更新 更多