2013-10-04 2 views
1

у меня есть редактировать текст, который позволяет пользователю вводить 6 символов и автоматически добавляет тире между символами 3 и 4.Android EditText ограничить символы, введенные

я хочу, чтобы запретить пользователю вручную ввести тире или любые другие специальные символы по тексту редактирования и я сделал это ниже:

андроид: цифры = «abcdefghijklmnopqrstuvwxyz1234567890»

Это работает, но когда я вручную добавить тире через textchange слушателя, это, конечно, оленья кожа добавить его.

Так я добавил тире на вышеуказанных ограничений:

андроид: цифры = «abcdefghijklmnopqrstuvwxyz1234567890-»

И, конечно, пользователь теперь может войти в тире!

Как я могу ограничить доступ пользователя к тире, позволяя его программно добавить в editText?

текущий код на слушателе изменения текста

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

    // add dash when user enters 4th character 
    if (text.length() == 4 && text.length() > before) { 
     text = (text.subSequence(0, 3) + "-" + text.charAt(count - 1)); 
     int pos = text.length(); 
     editText.setText(text); 
     editText.setSelection(pos); 

    } else if (text.length() == 4 && text.length() < before) { 
     // delete dash when user presses back 
     editText.setText(text.subSequence(0, 3)); 

     editText.setSelection(text.length() - 1); 
    } 

} 
+0

использование 2 разного EditText и поставить TextView с тиром между 2 – njzk2

+0

вы можете также использовать inputfilter. – njzk2

ответ

0

Может быть, это помогает, когда вы изменить разрешенные цифры, прежде чем добавить тир, и изменить их обратно после.

2

Добавить keyListener

edtxt.setKeyListener(new AlphaKeyListner());

public class AlphaKeyListner extends NumberKeyListener 
{ 
    @Override 
    protected char[] getAcceptedChars() 
    {  
     return new char [] { 
          'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
          'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
          'u', 'v', 'w', 'x', 'y', 'z', 
          'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
          'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 
          'U', 'V', 'W', 'X', 'Y', 'Z', 
           '1','2','3','4','5','6','7','8','9','0'}; 
    } 

    @Override 
    public void clearMetaKeyState(View view, Editable content, int states) 
    { 

    } 

    @Override 
    public int getInputType() 
    { 
     return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD; 
    } 
} 
1

StringBuilder SB = новый StringBuilder();

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

    // add dash when user enters 4th character 
    if (sb.length() == 3) { 
     sb.append("-"); 
     sb.append(text) 
     editText.setText(sb.toString()); 
     editText.setSelection(pos); 

    } else{ 
     sb.append(text) 
     editText.setText(sb.toString()); 
     editText.setSelection(pos); 
    } 

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