2015-05-25 8 views
2

Мне нужен текст ввода (цифры) в EditText, и я хочу разделить группу цифр на 4 цифры.Как разделить текст в EditText?

если я ввожу 000000000000, я хочу увидеть что-то вроде этого 0000 0000 0000.

Мои EditText:

 @NotEmpty 
     @InjectView(R.id.paymentCode) 
     EditText paymentCodeField; 
... 

    paymentCodeField.setOnTouchListener(eventHandler); 
... 

Я думаю, что нужно слушателю, но я не знаю, как это сделать.

Я попытался ниже код

paymentCodeField.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) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

, но я не знаю, как использовать его.

+0

сделать 4 редактировать текст с максимальной длиной 4 символом и используйте addTextChangedListener для перехода к следующему текстовому полю редактирования –

+0

см. Это http://www.codeitive.com/0HHgPVqjPj/custom-format-edit-text-input-android-to-accept-credit-card-number.html –

+0

это одно поле – ip696

ответ

2

Способ создания маскирует, но андроид не помогает нам с этой целью.

Вы можете реализовать свою собственную маску или использовать библиотеку.

https://github.com/toshikurauchi/MaskedEditText/tree/master/MaskedEditText

<br.com.sapereaude.maskedEditText.MaskedEditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    mask:mask="#### #### ####" 
/> 
0

Попробуйте один: Это для номер телефона

_edtphonenumber=(EditText)findViewById(R.id.editText_phonenumber); 

    _edtphonenumber.setTypeface(trajan_pro_regular); 
    _edtphonenumber.addTextChangedListener(new TextWatcher() { 
     private boolean mFormatting; // this is a flag which prevents the stack overflow. 
     private int mAfter; 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // nothing to do here.. 
     } 

     //called before the text is changed... 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      //nothing to do here... 
      mAfter = after; // flag to detect backspace.. 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // Make sure to ignore calls to afterTextChanged caused by the work done below 
      if (!mFormatting) { 
       mFormatting = true; 
       // using US formatting... 
       if(mAfter!=0) // in case back space ain't clicked... 
        PhoneNumberUtils.formatNumber(s,PhoneNumberUtils.getFormatTypeForLocale(Locale.US));        
       mFormatting = false; 
      } 
     } 
    }); 
+0

Если это не работает, чем дайте мне знать – Prashant

0

Вы должны написать код в beforeTextChanged

paymentCodeField.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
if (charSequence.length() % 4 == 0) paymentCodeField.setText(charSequence.toString() + " "); 
      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

Вы можете настроить свой вклад в редактирование текста, это поможет вам!

0

После изменения текста заменить все пробелы и вставить пространство запроса позиции

paymentCodeField.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

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

     @Override 
     public void afterTextChanged(Editable s) { 
      s.toString().replace(" ",""); 

      if(s.toString().length()>4 && s.toString().charAt(4)!=' ') 
       s.insert(4," "); 

      if(s.toString().length()>9 && s.toString().charAt(9)!=' ') 
       s.insert(9," "); 
     } 
    }); 
0

1. Добавить глобальную переменную count для подсчета числа входных char.

2. Update count внутри onTextChanged() и добавить проверку внутри afterTextChanged().

3. Если счетчик равен 4, а затем добавить space к текущей редактируемой text и установить его на EditText, а также изменить положение cursor к последнему с помощью setSelection() метода.

4. И наконец, отдых count значение для следующих входов.

Вот рабочий код:

int count = 0; 

    ................ 
    .................... 

    paymentCodeField.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) { 

      count++; 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

      if (count == 4) { 
       String str = editable.toString(); 
       str = str + " "; 

       editText.setText(str); 

       // Required to move cursor position after space 
       editText.setSelection(str.length()); 

       count = 0; 
      } 
     } 
    }); 

ВЫВОД:

enter image description here

Надеется, что это поможет ~

Смежные вопросы